Метод in_transaction
Метод in_transaction класса Connection возвращает
True, если в данный момент в соединении активна транзакция,
и False в противном случае. Метод не принимает параметров
и используется для проверки состояния соединения перед выполнением
операций, требующих явного управления транзакцией.
Синтаксис
Connection.in_transaction()
Пример
Давайте создадим соединение и проверим, активна ли транзакция сразу после подключения:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
print(conn.in_transaction())
Результат выполнения кода:
False
Пример
Давайте выполним запрос и снова проверим состояние транзакции. После выполнения запроса SQLAlchemy автоматически открывает транзакцию:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
print(conn.in_transaction())
conn.execute(text('SELECT 1'))
print(conn.in_transaction())
Результат выполнения кода:
False
True
Пример
Давайте явно откроем транзакцию методом begin
и проверим ее состояние:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
with conn.begin():
print(conn.in_transaction())
conn.execute(text('SELECT 1'))
print(conn.in_transaction())
Результат выполнения кода:
True
False
Пример
Давайте проверим состояние транзакции после вызова метода
commit. После фиксации транзакция завершается:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)'))
print(conn.in_transaction())
conn.commit()
print(conn.in_transaction())
Результат выполнения кода:
True
False
Смотрите также
-
класс
Connection,
который представляет соединение с базой данных -
метод
begin,
который открывает транзакцию в соединении -
метод
commit,
который фиксирует текущую транзакцию -
метод
rollback,
который откатывает текущую транзакцию