Класс SessionTransaction
Класс SessionTransaction представляет собой объект транзакции,
связанный с сессией. Он управляет жизненным циклом транзакции
базы данных, включая её начало, фиксацию и откат. Транзакция
создаётся автоматически при первом обращении к базе данных
в рамках сессии, либо может быть открыта явно с помощью
метода begin. Класс не принимает параметров
напрямую - экземпляр возвращается методами сессии.
Синтаксис
session.begin()
Пример
Давайте создадим сессию и откроем транзакцию явно, а затем зафиксируем её:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
trans = session.begin()
print(trans)
session.execute(text('SELECT 1'))
trans.commit()
Результат выполнения кода:
"<sqlalchemy.orm.session.SessionTransaction object at 0x...>"
Пример
Давайте выполним откат транзакции при возникновении ошибки:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
trans = session.begin()
try:
session.execute(text('INSERT INTO articles (title) VALUES (:title)'), {'title': 'article'})
trans.commit()
print('Transaction committed')
except Exception:
trans.rollback()
print('Transaction rolled back')
Результат выполнения кода:
"Transaction committed"
Пример
Давайте проверим состояние транзакции после её закрытия:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
trans = session.begin()
print(trans.is_active)
trans.close()
print(trans.is_active)
Результат выполнения кода:
True
False
Смотрите также
-
класс
SessionTransaction,
который представляет транзакцию сессии -
метод
commit,
который фиксирует текущую транзакцию -
метод
rollback,
который откатывает текущую транзакцию -
метод
close,
который закрывает транзакцию без фиксации