Метод __call__ класса sessionmaker
Метод __call__ класса sessionmaker
вызывается при обращении к экземпляру фабрики
сессий как к функции. Он создает и возвращает
новый объект Session, используя настройки,
заданные при создании sessionmaker:
движок bind, класс сессии class_,
параметры autoflush, autocommit,
expire_on_commit и другие.
Метод не принимает обязательных параметров,
но допускает передачу переопределений,
которые применяются только к создаваемой сессии.
Синтаксис
sessionmaker_instance()
Пример
Давайте создадим фабрику сессий и вызовем ее, чтобы получить объект сессии:
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...>"
Пример
Давайте используем созданную сессию для выполнения запроса к базе данных:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
session = Session()
res = session.execute(text('SELECT 1'))
print(res.scalar())
session.close()
Результат выполнения кода:
1
Пример
Давайте передадим переопределение параметра
expire_on_commit прямо при вызове фабрики:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine, expire_on_commit=True)
session = Session(expire_on_commit=False)
print(session.expire_on_commit)
session.close()
Результат выполнения кода:
False
Пример
Давайте создадим две независимые сессии из одной фабрики и убедимся, что это разные объекты:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
session_one = Session()
session_two = Session()
print(session_one is session_two)
session_one.close()
session_two.close()
Результат выполнения кода:
False
Смотрите также
-
класс
sessionmaker,
который создает фабрику сессий -
метод
begin,
который открывает транзакцию сессии -
метод
configure,
который меняет настройки фабрики -
метод
__call__,
который создает новый экземпляр сессии