SQLAlchemy
SQLAlchemy — інструментарій SQL та об'єктно-реляційне відображення для мови програмування Python випущене під ліцензією MIT.
Тип | Об'єктно-реляційне відображення |
---|---|
Автор | Майкл Байєр[1] |
Перший випуск | Лютий, 2006[2] |
Стабільний випуск | 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.] та declarative дозволяють користувачам розробку з декларативним синтаксисом.
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
Див. також
ред.Зноски
ред.- ↑ Mike Bayer is the creator of SQLAlchemy and Mako Templates for Python. Архів оригіналу за 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, ISBN 0-596-51614-2
- Bayer, Michael. The Architecture of Open Source Applications (Volume 2): SQLAlchemy. Архів оригіналу за 29 вересня 2018. Процитовано 2 жовтня 2018.