SQLAlchemy

редактировать
SQLAlchemy
Автор (ы) Майкл Bayer
Первоначальный выпуск14 февраля 2006 г.; 14 лет назад (14 февраля 2006 г.)
Стабильный выпуск 1.3.19 / 17 августа 2020 г.; 57 дней назад (2020-08-17)
Репозиторий Измените это на Викиданных
Написано наPython
Операционная система Кросс-платформенный
Тип Объектно-реляционное сопоставление
Лицензия Лицензия MIT
Веб-сайтwww.sqlalchemy.org Отредактируйте Викиданные
Майк Байер рассказывает о SQLAlchemy на PyCon 2012

SQLAlchemy - это открытый источник инструментарий SQL и объектно-реляционный преобразователь (ORM) для языка программирования Python. выпущен по лицензии MIT.

Содержание
  • 1 Описание
  • 2 История
  • 3 Пример
    • 3.1 Определение схемы
    • 3.2 Вставка данных
    • 3.3 Запрос
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
Описание

Философия SQLAlchemy заключается в том, что реляционные базы данных ведут себя не так, как коллекции объектов по мере увеличения масштаба и производительности, в то время как коллекции объектов ведут себя меньше как таблицы и строки, поскольку в них встроено больше абстракции. По этой причине он принял шаблон отображения данных (аналогичный Hibernate для Java ), а не шаблон активной записи, используемый ряд других объектно-реляционных картографов. Однако дополнительные плагины позволяют пользователям разрабатывать с использованием декларативного синтаксиса.

History

SQLAlchemy впервые был выпущен в феврале 2006 года и быстро стал одним из наиболее широко используемых инструментов объектно-реляционного сопоставления в Python. community, а также Django ORM.

Пример

В следующем примере представлена ​​взаимосвязь n-to-1 между фильмами и их режиссерами. Показано, как определенные пользователем классы Python создают соответствующие таблицы базы данных, как экземпляры со связями создаются с обеих сторон связи и, наконец, как данные могут быть запрошены - на примере автоматически сгенерированного SQL запросы как для отложенной, так и для активной загрузки.

Определение схемы

Создание двух классов Python и соответствующих таблиц базы данных в СУБД:

из импорта sqlalchemy * из sqlalchemy.ext. Декларативный импорт declarative_base из отношения импорта sqlalchemy.orm, база создателя сеансов = declarative_base () class Movie (Base): __tablename__ = "movies" id = Column (Integer, primary_key = True) title = Column (String (255), nullable = False) year = Column (Integer) visible_by = Column (Integer, ForeignKey ("directors.id")) Director = Relations ("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 ( Целое число, 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 / d bname ") Base.metadata.create_all (engine)

Вставка данных

Можно вставить отношение режиссер-фильм через любой объект:

Session = sessionmaker (bind = engine) session = Session () m1 = Фильм ("Робокоп", 1987) m1.director = Режиссер ("Пол Верховен") d2 = Режиссер ("Джордж Лукас") d2.movies = [Фильм ("Звездные войны", 1977), Фильм ("THX 1138 ", 1971)] try: session.add (m1) session.add (d2) session.commit () except: session.rollback ()

Запрос

alldata = session.query (Movie).all () для некоторых данных в alldata: print (somedata)

SQLAlchemy выдает следующий запрос к СУБД (без псевдонимов):

SELECT movies.id, movies.title, movies.year, movies.directed_by, directors.id, directors.name FROM movies LEFT OUTER JOIN режиссеры ON directors.id = movies.directed_by

Результат:

Movie ('Robocop', 1987L, Director ('Paul Verhoeven')) Movie ('Star Wars', 1977L, Режиссер ('Джордж Лукас')) Фильм ('THX 1138', 1971L, Режиссер ('Джордж Лукас'))

Настройка 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
См. также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Примечания
External ссылки
Последняя правка сделана 2021-06-06 04:10:32
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте