SQLAlchemy - SQLAlchemy
Эта статья содержит контент, который написан как Реклама.Декабрь 2017 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Оригинальный автор (ы) | Майкл Байер[1][2] |
---|---|
изначальный выпуск | 14 февраля 2006 г.[3] |
Стабильный выпуск | 1.3.20 / 12 октября 2020 г.[4] |
Репозиторий | |
Написано в | Python |
Операционная система | Кроссплатформенность |
Тип | Объектно-реляционное отображение |
Лицензия | Лицензия MIT[5] |
Интернет сайт | www |
SQLAlchemy является Открытый исходный код SQL инструментарий и объектно-реляционный преобразователь (ORM) для Язык программирования Python выпущен под Лицензия MIT.[5]
Описание
Философия SQLAlchemy заключается в том, что реляционные базы данных ведут себя меньше как коллекции объектов, поскольку масштаб увеличивается, а производительность начинает вызывать беспокойство, в то время как коллекции объектов ведут себя меньше как таблицы и строки, поскольку в них создается больше абстракции. По этой причине он принял шаблон отображения данных (похожий на Спящий режим за Ява ), а не активный шаблон записи используется рядом других объектно-реляционных картографов.[6] Однако дополнительные плагины позволяют пользователям разрабатывать с использованием декларативного синтаксиса.[7]
История
SQLAlchemy был впервые выпущен в феврале 2006 г.[8][3] и быстро стал одним из наиболее широко используемых инструментов объектно-реляционного сопоставления в сообществе Python, наряду с Джанго с ORM.
Пример
Эта секция возможно содержит оригинальные исследования.Ноябрь 2019) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В следующем примере представлены отношения n-к-1 между фильмами и их режиссерами. Показано, как пользовательские Python классы создают соответствующие таблицы базы данных, как экземпляры со связями создаются с обеих сторон отношения, и, наконец, как данные могут быть запрошены - иллюстрируя автоматически сгенерированные SQL запросы для обоих ленивый и нетерпеливой загрузки.
Определение схемы
Создание двух классов Python и соответствующих таблиц базы данных в СУБД:
из sqlalchemy импорт *из sqlalchemy.ext.declarative импорт декларативная_базаиз sqlalchemy.orm импорт связь, создатель сессийОснование = декларативная_база()учебный класс Фильм(Основание): __tablename__ = "фильмы" я бы = Столбец(Целое число, первичный ключ=Истинный) заглавие = Столбец(Нить(255), обнуляемый=Ложь) год = Столбец(Целое число) режиссер = Столбец(Целое число, Иностранный ключ("directors.id")) директор = связь("Директор", обратная ссылка="фильмы", ленивый=Ложь) def __в этом__(себя, заглавие=Никто, год=Никто): себя.заглавие = заглавие себя.год = год def __repr__(себя): возвращаться "Фильм(%р, %р, %р)" % (себя.заглавие, себя.год, себя.директор)учебный класс Директор(Основание): __tablename__ = "директора" я бы = Столбец(Целое число, первичный ключ=Истинный) имя = Столбец(Нить(50), обнуляемый=Ложь, уникальный=Истинный) def __в этом__(себя, имя=Никто): себя.имя = имя def __repr__(себя): возвращаться "Директор (%р)" % (себя.имя)двигатель = create_engine("dbms: // user: pwd @ host / dbname")Основание.метаданные.create_all(двигатель)
Вставка данных
Можно вставить отношения режиссер-фильм через любой объект:
Сессия = создатель сессий(связывать=двигатель)сессия = Сессия()m1 = Фильм(«Робокоп», 1987)m1.директор = Директор("Пол Верховен")d2 = Директор("Джордж Лукас")d2.фильмы = [Фильм("Звездные войны", 1977), Фильм(«THX 1138», 1971)]пытаться: сессия.Добавить(m1) сессия.Добавить(d2) сессия.совершить()Кроме: сессия.откат()
Запрос
все данные = сессия.запрос(Фильм).все()за некоторые данные в все данные: Распечатать(некоторые данные)
SQLAlchemy выдает следующий запрос к СУБД (без псевдонимов):
ВЫБРАТЬ фильмы.я бы, фильмы.заглавие, фильмы.год, фильмы.режиссер, директора.я бы, директора.имяИЗ фильмы ОСТАВИЛИ ВНЕШНИЙ ПРИСОЕДИНИТЬСЯ директора НА директора.я бы = фильмы.режиссер
Выход:
Фильм('Робокоп', 1987L, Директор('Пол Верховен'))Фильм('Звездные войны', 1977L, Директор('Джордж Лукас'))Фильм('THX 1138', 1971L, Директор('Джордж Лукас'))
Параметр lazy = True
(по умолчанию) вместо этого SQLAlchemy сначала отправит запрос для получения списка фильмов и только при необходимости (ленивый) для каждого режиссера запрос, чтобы получить имя соответствующего режиссера:
ВЫБРАТЬ фильмы.я бы, фильмы.заглавие, фильмы.год, фильмы.режиссерИЗ фильмыВЫБРАТЬ директора.я бы, директора.имяИЗ директораКУДА директора.я бы = %s
Смотрите также
Рекомендации
- ^ Майк Байер - создатель шаблонов SQLAlchemy и Mako для Python.
- ^ Интервью Майка Байера SQLAlchemy #pydata #python
- ^ а б «Скачать - SQLAlchemy». SQLAlchemy. Получено 21 февраля 2015.
- ^ «Релизы - sqlalchemy / sqlalchemy». Получено 3 ноября 2020 - через GitHub.
- ^ а б "zzzeek / sqlalchemy / source / LICENSE". BitBucket. Получено 21 февраля 2015.
- ^ в Архитектура приложений с открытым исходным кодом
- ^ Декларативная
- ^ http://decisionstats.com/2015/12/29/interview-mike-bayer-sqlalchemy-pydata-python/
- Примечания
- Дар, Ной (12 августа 2008 г.). «Использование SQLAlchemy». Developerworks. IBM. Получено 8 февраля 2011.
- Рик Коупленд, Essential SQLAlchemy, О'Рейли, 2008, ISBN 0-596-51614-2