Jump to content

SQLАлхимия

Оригинальный автор(ы) Майкл Байер [1]
Первоначальный выпуск 14 февраля 2006 г .; 18 лет назад ( 14 февраля 2006 г. ) [2]
Стабильная версия
2.0.31 [3]  Отредактируйте это в Викиданных / 18 июня 2024 г .; 45 дней назад ( 18 июня 2024 г. )
Репозиторий
Написано в Питон
Операционная система Кросс-платформенный
Тип Объектно-реляционное отображение
Лицензия МОЯ лицензия [4]
Веб-сайт www .sqlalchemy .org  Edit this on Wikidata
Майк Байер рассказывает о SQLAlchemy на PyCon 2012

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

См. также

[ редактировать ]
  1. ^ Майк Байер — создатель SQLAlchemy и шаблонов Mako для Python.
  2. ^ «Скачать — SQLAlchemy» . SQLАлхимия . Проверено 21 февраля 2015 г.
  3. ^ «Выпуск 2.0.31» . 18 июня 2024 г. Проверено 26 июня 2024 г.
  4. ^ «zzzeek/sqlalchemy/source/LICENSE» . Битбакет . Проверено 21 февраля 2015 г.
  5. ^ «Журнал изменений 0.1 — Документация по SQLAlchemy 2.0» . docs.sqlalchemy.org . Проверено 4 июля 2024 г.
  6. ^ «Журнал изменений версии 1.0 — Документация по SQLAlchemy 2.0» . docs.sqlalchemy.org . Проверено 4 июля 2024 г.
  7. ^ «Журнал изменений 1.4 — Документация по SQLAlchemy 2.0» . docs.sqlalchemy.org . Проверено 4 июля 2024 г.
Примечания
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0bfa7dd063f20b1e39f2668173590faf__1721394420
URL1:https://arc.ask3.ru/arc/aa/0b/af/0bfa7dd063f20b1e39f2668173590faf.html
Заголовок, (Title) документа по адресу, URL1:
SQLAlchemy - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)