Класс sessionmaker
Класс sessionmaker создает фабрику сессий,
которая используется для генерации объектов
Session. Первым параметром класс принимает
привязку к движку через аргумент bind,
а также позволяет настроить поведение сессий
такими параметрами, как autoflush,
autocommit и expire_on_commit.
Фабрика позволяет создавать сессии с едиными
настройками в разных частях приложения.
Синтаксис
sessionmaker(bind=None, [autoflush], [autocommit], [expire_on_commit])
Пример
Давайте создадим фабрику сессий и сгенерируем
одну сессию для базы SQLite в памяти:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
session = Session()
print(session)
Результат выполнения кода:
"<sqlalchemy.orm.session.Session object at 0x...>"
Пример
Давайте создадим фабрику сессий без привязки к движку
и настроим ее позже методом configure:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:')
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
print(session.bind)
Результат выполнения кода:
"Engine(sqlite:///:memory:)"
Пример
Давайте создадим модель и добавим запись в базу через сессию, сгенерированную фабрикой:
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
article = Article(title='article')
session.add(article)
session.commit()
res = session.query(Article).all()
print([a.title for a in res])
Результат выполнения кода:
['article']
Смотрите также
-
класс
sessionmaker,
который представляет фабрику сессий -
метод
begin,
который открывает транзакцию сессии -
метод
configure,
который настраивает фабрику сессий -
метод
__call__,
который создает новый объект сессии