РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
614 of 711 menu

Событие 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,
    которая подписывает обработчик на событие
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить