SQLAlchemy — інструментарій SQL та об'єктно-реляційне відображення для мови програмування Python випущене під ліцензією MIT.
Тип | Об'єктно-реляційне відображення |
---|---|
Автор | Майкл Байєр |
Перший випуск | Лютий, 2006 |
Стабільний випуск | 1.0.8 (23 липня, 2015 ) |
Операційна система | Кросплатформний |
Мова програмування | Python |
Стан розробки | Активний |
Ліцензія | Ліцензія MIT |
Репозиторій | github.com/sqlalchemy/sqlalchemy |
Вебсайт | sqlalchemy.org |
SQLAlchemy надає «повний набір добре відомих шаблонів корпоративного рівня стабільності, сконструйованих для високопродуктивного доступу до бази даних, написаних простою мовою Python». Філософія SQLAlchemy стверджує що бази даних SQL поводяться тим менш подібно на колекції об'єктів чим більше починають важити розмір та продуктивність, і навпаки, колекції об'єктів починають поводитись тим менш подібно на таблиці і записи чим більш починає важити рівень абстракції. Тому, було впроваджено шаблон Data mapper (подібний на Hibernate для Java) замість шаблону active Record який використовується в багатьох інших об'єктно-реляційних відображеннях. Проте, додаткові плагіни, такі як Elixir [ 16 червня 2017 у Wayback Machine.] та дозволяють користувачам розробку з декларативним синтаксисом.
SQLAlchemy була вперше випущена в лютому 2006-го, і швидко стала однією з найширше використовуваних в спільноті Python бібліотек для об'єктно-реляційного відображення.
Приклад
Наступний приклад демонструє відношення n-до-1 між фільмами та їх режисерами. Показано, як описані користувачем класи Python створюють відповідні таблиці бази даних, як елементи відношення створюються на кожній стороні відношення, і як можна робити запити до даних.
Опис схеми
Створенням двох класів, і відповідних таблиць в СКБД:
from sqlalchemy import * from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relation, sessionmaker Base = declarative_base() class Movie(Base): __tablename__ = 'movies' id = Column(Integer, primary_key=True) title = Column(String(255), nullable=False) year = Column(Integer) directed_by = Column(Integer, ForeignKey('directors.id')) director = relation("Director", backref='movies', lazy=False) def __init__(self, title=None, year=None): self.title = title self.year = year def __repr__(self): return "Movie(%r, %r, %r)" % (self.title, self.year, self.director) class Director(Base): __tablename__ = 'directors' id = Column(Integer, primary_key=True) name = Column(String(50), nullable=False, unique=True) def __init__(self, name=None): self.name = name def __repr__(self): return "Director(%r)" % (self.name) engine = create_engine('dbms://user:pwd@host/dbname') Base.metadata.create_all(engine)
Вставляння даних
Вставляння фільмів та їх режисерів може досягатись через обидва екземпляри:
Session = sessionmaker(bind=engine) session = Session() m1 = Movie("Star Trek", 2009) m1.director = Director("JJ Abrams") d2 = Director("George Lucas") d2.movies = [Movie("Star Wars", 1977), Movie("THX 1138", 1971)] try: session.add(m1) session.add(d2) session.commit() except: session.rollback()
Запити
alldata = session.query(Movie).all() for somedata in alldata: print somedata
SQLAlchemy передає до СКБД наступний запит:
SELECT movies.id, movies.title, movies.year, movies.directed_by, directors.id, directors.name FROM movies LEFT OUTER JOIN directors ON directors.id = movies.directed_by
Вивід:
Movie('Star Trek', 2009L, Director('JJ Abrams')) Movie('Star Wars', 1977L, Director('George Lucas')) Movie('THX 1138', 1971L, Director('George Lucas'))
Якщо встановити опцію lazy=True
, SQLAlchemy спочатку виконає запит для отримання тільки списку фільмів, і лише за потребою виконає запит для кожного режисера, щоб отримати його ім'я:
SELECT movies.id, movies.title, movies.year, movies.directed_by FROM movies SELECT directors.id, directors.name FROM directors WHERE directors.id = %s
Див. також
Зноски
- . Архів оригіналу за 26 жовтня 2012. Процитовано 6 серпня 2011.
- PyCon 2007 Wrapup [ 21 жовтня 2012 у Wayback Machine.],SQLAlchemy released 0.1.0 in February 2006 — O'Reilly Media
Посилання
- SQLAlchemy home page [ 7 грудня 2012 у Wayback Machine.]
- SQLAlchemy на SourceForge.net
- Gift, Noah. Using SQLAlchemy. Developerworks. IBM. Архів оригіналу за 2 квітня 2012. Процитовано 6 серпня 2011.
- Rick Copeland, Essential SQLAlchemy [ 6 вересня 2011 у Wayback Machine.], O'Reilly, 2008,
- Bayer, Michael. . Архів оригіналу за 29 вересня 2018. Процитовано 2 жовтня 2018.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
SQLAlchemy instrumentarij SQL ta ob yektno relyacijne vidobrazhennya dlya movi programuvannya Python vipushene pid licenziyeyu MIT SQLAlchemyTipOb yektno relyacijne vidobrazhennyaAvtorMajkl BajyerPershij vipuskLyutij 2006Stabilnij vipusk1 0 8 23 lipnya 2015 8 rokiv tomu 2015 07 23 Operacijna sistemaKrosplatformnijMova programuvannyaPythonStan rozrobkiAktivnijLicenziyaLicenziya MITRepozitorijgithub com sqlalchemy sqlalchemyVebsajtsqlalchemy org SQLAlchemy nadaye povnij nabir dobre vidomih shabloniv korporativnogo rivnya stabilnosti skonstrujovanih dlya visokoproduktivnogo dostupu do bazi danih napisanih prostoyu movoyu Python Filosofiya SQLAlchemy stverdzhuye sho bazi danih SQL povodyatsya tim mensh podibno na kolekciyi ob yektiv chim bilshe pochinayut vazhiti rozmir ta produktivnist i navpaki kolekciyi ob yektiv pochinayut povoditis tim mensh podibno na tablici i zapisi chim bilsh pochinaye vazhiti riven abstrakciyi Tomu bulo vprovadzheno shablon Data mapper podibnij na Hibernate dlya Java zamist shablonu active Record yakij vikoristovuyetsya v bagatoh inshih ob yektno relyacijnih vidobrazhennyah Prote dodatkovi plagini taki yak Elixir 16 chervnya 2017 u Wayback Machine ta dozvolyayut koristuvacham rozrobku z deklarativnim sintaksisom SQLAlchemy bula vpershe vipushena v lyutomu 2006 go i shvidko stala odniyeyu z najshirshe vikoristovuvanih v spilnoti Python bibliotek dlya ob yektno relyacijnogo vidobrazhennya PrikladNastupnij priklad demonstruye vidnoshennya n do 1 mizh filmami ta yih rezhiserami Pokazano yak opisani koristuvachem klasi Python stvoryuyut vidpovidni tablici bazi danih yak elementi vidnoshennya stvoryuyutsya na kozhnij storoni vidnoshennya i yak mozhna robiti zapiti do danih Opis shemi Stvorennyam dvoh klasiv i vidpovidnih tablic v SKBD from sqlalchemy import from sqlalchemy ext declarative import declarative base from sqlalchemy orm import relation sessionmaker Base declarative base class Movie Base tablename movies id Column Integer primary key True title Column String 255 nullable False year Column Integer directed by Column Integer ForeignKey directors id director relation Director backref movies lazy False def init self title None year None self title title self year year def repr self return Movie r r r self title self year self director class Director Base tablename directors id Column Integer primary key True name Column String 50 nullable False unique True def init self name None self name name def repr self return Director r self name engine create engine dbms user pwd host dbname Base metadata create all engine Vstavlyannya danih Vstavlyannya filmiv ta yih rezhiseriv mozhe dosyagatis cherez obidva ekzemplyari Session sessionmaker bind engine session Session m1 Movie Star Trek 2009 m1 director Director JJ Abrams d2 Director George Lucas d2 movies Movie Star Wars 1977 Movie THX 1138 1971 try session add m1 session add d2 session commit except session rollback Zapiti alldata session query Movie all for somedata in alldata print somedata SQLAlchemy peredaye do SKBD nastupnij zapit SELECT movies id movies title movies year movies directed by directors id directors name FROM movies LEFT OUTER JOIN directors ON directors id movies directed by Vivid Movie Star Trek 2009 L Director JJ Abrams Movie Star Wars 1977 L Director George Lucas Movie THX 1138 1971 L Director George Lucas Yaksho vstanoviti opciyu lazy True SQLAlchemy spochatku vikonaye zapit dlya otrimannya tilki spisku filmiv i lishe za potreboyu vikonaye zapit dlya kozhnogo rezhisera shob otrimati jogo im ya SELECT movies id movies title movies year movies directed by FROM movies SELECT directors id directors name FROM directors WHERE directors id sDiv takozhSQLObject Storm Pylons TurboGears DjangoZnoski Arhiv originalu za 26 zhovtnya 2012 Procitovano 6 serpnya 2011 PyCon 2007 Wrapup 21 zhovtnya 2012 u Wayback Machine SQLAlchemy released 0 1 0 in February 2006 O Reilly MediaPosilannyaSQLAlchemy home page 7 grudnya 2012 u Wayback Machine SQLAlchemy na SourceForge net Gift Noah Using SQLAlchemy Developerworks IBM Arhiv originalu za 2 kvitnya 2012 Procitovano 6 serpnya 2011 Rick Copeland Essential SQLAlchemy 6 veresnya 2011 u Wayback Machine O Reilly 2008 ISBN 0 596 51614 2 Bayer Michael Arhiv originalu za 29 veresnya 2018 Procitovano 2 zhovtnya 2018