SQLАлхимия
Оригинальный автор(ы) | Майкл Байер [1] |
---|---|
Первоначальный выпуск | 14 февраля 2006 г [2] |
Стабильная версия | 2.0.31 [3]
/ 18 июня 2024 г |
Репозиторий | |
Написано в | Питон |
Операционная система | Кросс-платформенный |
Тип | Объектно-реляционное отображение |
Лицензия | МОЯ лицензия [4] |
Веб-сайт | www |
SQLAlchemy — это с открытым исходным кодом библиотека Python , которая предоставляет набор инструментов SQL и реляционный преобразователь объектов (ORM) для взаимодействия с базой данных. Он позволяет разработчикам работать с базами данных с использованием объектов Python, обеспечивая эффективный и гибкий доступ к базе данных.
Описание
[ редактировать ]SQLAlchemy предлагает инструменты для создания схемы базы данных, выполнения запросов и объектно-реляционного сопоставления. Ключевые особенности включают в себя:
- Комплексный язык выражений SQL для создания и выполнения запросов SQL.
- Мощный ORM, который позволяет сопоставлять классы Python с таблицами базы данных.
- Поддержка миграции схемы базы данных.
- Совместимость с несколькими базами данных.
- Инструменты для пула подключений к базе данных и управления транзакциями.
История
[ редактировать ]SQLAlchemy был впервые выпущен в феврале 2006 года. Он развился и включил в себя широкий спектр функций взаимодействия с базами данных и завоевал популярность среди разработчиков Python. Известные версии включают:
- Версия 0.1 (2006 г.): [5] Первоначальный выпуск.
- Версия 1.0 (2015 г.): [6] Значительные улучшения в языке выражений ORM и SQL.
- Версия 1.4 (2021 г.): [7] Введение нового API ORM.
Пример
[ редактировать ]Следующий пример представляет отношение n-к-1 между фильмами и их режиссерами. Показано, как определяемые пользователем классы Python создают соответствующие таблицы базы данных, как создаются экземпляры с отношениями с обеих сторон отношений и, наконец, как можно запрашивать данные — иллюстрируя автоматически генерируемые SQL-запросы как для отложенной , так и для быстрой загрузки.
Определение схемы
[ редактировать ]Создание двух классов 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 f"Movie({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 f"Director({self.name})"
engine = create_engine("dbms://user:pwd@host/dbname")
Base.metadata.create_all(engine)
Вставка данных
[ редактировать ]Можно вставить связь «режиссер-фильм» через любой объект:
Session = sessionmaker(bind=engine)
session = Session()
m1 = Movie("Robocop", 1987)
m1.director = Director("Paul Verhoeven")
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('Robocop', 1987L, Director('Paul Verhoeven'))
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
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Майк Байер — создатель SQLAlchemy и шаблонов Mako для Python.
- ^ «Скачать — SQLAlchemy» . SQLАлхимия . Проверено 21 февраля 2015 г.
- ^ «Выпуск 2.0.31» . 18 июня 2024 г. Проверено 26 июня 2024 г.
- ^ «zzzeek/sqlalchemy/source/LICENSE» . Битбакет . Проверено 21 февраля 2015 г.
- ^ «Журнал изменений 0.1 — Документация по SQLAlchemy 2.0» . docs.sqlalchemy.org . Проверено 4 июля 2024 г.
- ^ «Журнал изменений версии 1.0 — Документация по SQLAlchemy 2.0» . docs.sqlalchemy.org . Проверено 4 июля 2024 г.
- ^ «Журнал изменений 1.4 — Документация по SQLAlchemy 2.0» . docs.sqlalchemy.org . Проверено 4 июля 2024 г.
- Примечания
- Гифт, Ной (12 августа 2008 г.). «Использование SQLAlchemy» . Разработчик работает . ИБМ . Проверено 8 февраля 2011 г.
- Рик Коупленд, Essential SQLAlchemy, О'Рейли , 2008 г., ISBN 0-596-51614-2