Метод get_transaction
Метод get_transaction класса Session
возвращает объект текущей транзакции, если она была
начата, или значение None в противном случае.
Метод не принимает параметров и не начинает новую
транзакцию - он только позволяет получить доступ
к уже существующей транзакции верхнего уровня.
Это удобно для проверки состояния сессии и
управления логикой работы с транзакциями.
Синтаксис
Session.get_transaction()
Пример
Давайте создадим сессию и проверим, есть ли
у нее активная транзакция до и после вызова
метода begin:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
print(session.get_transaction())
trans = session.begin()
print(session.get_transaction())
Результат выполнения кода:
None
<sqlalchemy.orm.session.SessionTransaction object at 0x...>
Пример
Давайте сравним объект, возвращаемый методом
get_transaction, с объектом, полученным
при вызове begin:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
trans = session.begin()
print(session.get_transaction() is trans)
Результат выполнения кода:
True
Пример
Давайте выполним запрос внутри транзакции
и проверим, что метод get_transaction
возвращает активную транзакцию после коммита:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
trans = session.begin()
session.execute(text('SELECT 1'))
trans.commit()
print(session.get_transaction())
Результат выполнения кода:
None
Смотрите также
-
класс
Session,
который представляет сессию работы с базой данных -
метод
begin,
который начинает новую транзакцию -
метод
get_nested_transaction,
который возвращает вложенную транзакцию -
метод
commit,
который фиксирует текущую транзакцию