Событие after_rollback
Событие after_rollback срабатывает после того,
как сессия выполнила откат транзакции. Оно относится
к событиям сессии и позволяет выполнить код
после завершения операции rollback.
Обработчик получает первым параметром объект сессии,
в которой произошел откат.
Синтаксис
from sqlalchemy import event
@event.listens_for(Session, 'after_rollback')
def after_rollback_handler(session):
pass
Пример
Давайте создадим сессию и подпишемся на событие
after_rollback, чтобы увидеть момент отката:
from sqlalchemy import create_engine, event
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
@event.listens_for(Session, 'after_rollback')
def after_rollback_handler(session):
print('after_rollback triggered')
with Session(engine) as session:
session.rollback()
Результат выполнения кода:
"after_rollback triggered"
Пример
Давайте в обработчике выведем информацию о сессии:
from sqlalchemy import create_engine, event
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
@event.listens_for(Session, 'after_rollback')
def after_rollback_handler(session):
print('session rolled back:', session)
with Session(engine) as session:
session.rollback()
Результат выполнения кода:
"session rolled back: <sqlalchemy.orm.session.Session object at 0x...>"
Пример
Давайте посмотрим, как событие срабатывает при откате после добавления объекта в сессию:
from sqlalchemy import create_engine, event, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
@event.listens_for(Session, 'after_rollback')
def after_rollback_handler(session):
print('rollback done')
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.rollback()
Результат выполнения кода:
"rollback done"
Смотрите также
-
событие
after_commit,
которое срабатывает после фиксации транзакции -
событие
before_commit,
которое срабатывает перед фиксацией транзакции -
событие
after_soft_rollback,
которое срабатывает после мягкого отката сессии -
функцию
listens_for,
которая подписывает обработчик на событие