Событие before_configured
Событие before_configured относится к секции
event и срабатывает перед тем, как
SQLAlchemy выполнит настройку мапперов. Оно
позволяет вмешаться в процесс конфигурации
до того, как все связи и таблицы будут
окончательно связаны между собой. Обработчик
не принимает обязательных аргументов, кроме
самого события, и вызывается один раз для
всего реестра мапперов.
Синтаксис
from sqlalchemy import event
event.listen(Mapper, 'before_configured', fn)
Пример
Давайте создадим простую модель и повесим
обработчик на событие before_configured,
чтобы увидеть момент его срабатывания:
from sqlalchemy import create_engine, 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]
@event.listens_for(Mapper, 'before_configured')
def on_before_configured():
print('before_configured fired')
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Результат выполнения кода:
"before_configured fired"
Пример
Давайте через событие before_configured
добавим дополнительный столбец к модели до
того, как мапперы будут настроены:
Результат выполнения кода:
[(1, 'article', 10)]
Пример
Давайте с помощью события before_configured
зарегистрируем новую модель до завершения
конфигурации:
Результат выполнения кода:
[(1, 'user')]
Смотрите также
-
событие
after_configured,
которое срабатывает после настройки мапперов -
функцию
listens_for,
которая регистрирует обработчик события -
функцию
listen,
которая подписывает функцию на событие -
событие
before_flush,
которое срабатывает перед сбросом изменений