Метод get_nested_transaction
Метод get_nested_transaction возвращает объект
SessionTransaction, представляющий текущую
вложенную транзакцию (SAVEPOINT), или None,
если вложенная транзакция не активна. Метод не
принимает параметров. Вложенная транзакция создается
методом begin_nested и представляет собой
точку сохранения внутри внешней транзакции.
Синтаксис
Session.get_nested_transaction()
Пример
Давайте создадим сессию и проверим, что до вызова
begin_nested вложенная транзакция отсутствует:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
res = session.get_nested_transaction()
print(res)
Результат выполнения кода:
"None"
Пример
Теперь откроем вложенную транзакцию и получим ее
через метод get_nested_transaction:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
with session.begin_nested():
res = session.get_nested_transaction()
print(res)
Результат выполнения кода:
"<sqlalchemy.orm.session.SessionTransaction object at ...>"
Пример
Давайте проверим, что метод возвращает именно
активную вложенную транзакцию, сравнив ее с
объектом, созданным begin_nested:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
nested = session.begin_nested()
res = session.get_nested_transaction()
print(res is nested)
Результат выполнения кода:
"True"
Пример
Давайте посмотрим, что произойдет после завершения
вложенной транзакции - метод снова вернет
None:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
with session.begin_nested():
res = session.get_nested_transaction()
print(res is not None)
res = session.get_nested_transaction()
print(res)
Результат выполнения кода:
"True"
"None"
Смотрите также
-
метод
begin_nested,
который открывает вложенную транзакцию -
метод
get_transaction,
который возвращает текущую внешнюю транзакцию -
класс
Session,
который представляет сессию работы с базой -
метод
commit,
который фиксирует текущую транзакцию