Метод configure
Метод configure класса scoped_session
позволяет изменить параметры уже созданной
фабрики сессий. Первым параметром метод
принимает функцию session_factory,
которая создает объекты сессий. Также можно
передать дополнительные именованные аргументы,
например, bind для привязки к движку.
Этот метод полезен, когда объект scoped_session
был создан заранее, а параметры подключения
к базе данных становятся известны позже,
например, после загрузки конфигурации.
Синтаксис
scoped_session.configure(session_factory, [bind], [class_])
Пример
Давайте создадим фабрику сессий и затем
настроим ее с помощью метода configure:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
engine = create_engine('sqlite:///:memory:')
Session = scoped_session(sessionmaker())
Session.configure(bind=engine)
print(Session.bind)
Результат выполнения кода:
"Engine(sqlite:///:memory:)"
Пример
Давайте создадим таблицу и добавим запись,
используя настроенную через configure
фабрику сессий:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.orm import scoped_session, sessionmaker
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Session = scoped_session(sessionmaker())
Session.configure(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']
Пример
Давайте изменим класс сессии через параметр
class_ при повторной настройке:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.orm import Session as SessionClass
engine = create_engine('sqlite:///:memory:')
Session = scoped_session(sessionmaker())
Session.configure(bind=engine, class_=SessionClass)
print(Session.class_)
Результат выполнения кода:
<class 'sqlalchemy.orm.session.Session'>
Смотрите также
-
класс
scoped_session,
который создает фабрику сессий с областью видимости -
метод
remove,
который удаляет текущую сессию из реестра -
метод
query,
который возвращает объект запроса текущей сессии -
метод
configure,
который настраивает параметры фабрики сессий