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

Событие after_configured

Событие after_configured принадлежит пространству имен MapperEvents и срабатывает один раз после того, как все мапперы в реестре завершили свою настройку. Это событие не принимает никаких аргументов и используется для выполнения кода, который должен запуститься только после того, как все модели и их связи были полностью сконфигурированы.

В отличие от события before_configured, которое срабатывает перед началом настройки мапперов, событие after_configured гарантирует, что все мапперы уже готовы к работе. Это делает его удобным местом для регистрации дополнительных обработчиков, построения индексов или выполнения отложенной инициализации, зависящей от структуры моделей.

Событие подключается через декоратор event.listens_for с указанием класса Mapper и строки 'after_configured'.

Синтаксис

from sqlalchemy import event from sqlalchemy.orm import Mapper @event.listens_for(Mapper, 'after_configured') def receive_after_configured(): pass

Пример

Давайте создадим простую модель и повесим на событие after_configured обработчик, который выведет сообщение после завершения настройки:

from sqlalchemy import event from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Mapper class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] text: Mapped[str] @event.listens_for(Mapper, 'after_configured') def receive_after_configured(): print('All mappers configured') from sqlalchemy import create_engine from sqlalchemy.orm import Session engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='some text') session.add(article) session.commit()

Результат выполнения кода:

"All mappers configured"

Пример

Событие after_configured удобно использовать для сбора информации обо всех настроенных мапперах. Давайте выведем список таблиц, зарегистрированных в метаданных после конфигурации:

from sqlalchemy import event from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Mapper class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] class User(Base): __tablename__ = 'users' id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] @event.listens_for(Mapper, 'after_configured') def receive_after_configured(): tables = sorted(Base.metadata.tables.keys()) print(tables) from sqlalchemy import create_engine from sqlalchemy.orm import Session engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add(Article(title='article')) session.add(User(name='user')) session.commit()

Результат выполнения кода:

['articles', 'users']

Пример

Обработчик события after_configured можно зарегистрировать несколько раз. Все обработчики будут вызваны по очереди. Давайте убедимся в этом:

from sqlalchemy import event from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Mapper class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] status: Mapped[str] @event.listens_for(Mapper, 'after_configured') def first_handler(): print('First handler fired') @event.listens_for(Mapper, 'after_configured') def second_handler(): print('Second handler fired') from sqlalchemy import create_engine from sqlalchemy.orm import Session engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add(Article(title='article', status='draft')) session.commit()

Результат выполнения кода:

"First handler fired" "Second handler fired"

Смотрите также

  • событие before_configured,
    которое срабатывает перед настройкой мапперов
  • функцию listens_for,
    которая регистрирует обработчик события
  • функцию listen,
    которая подключает слушателя к событию
  • функцию remove,
    которая удаляет обработчик события
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить