События ОРМ

ORM включает в себя широкий спектр крючков, доступных для подписки.

Введение в наиболее часто используемые события ORM см. в разделе Отслеживание запросов, изменений объектов и сессий с помощью событий. Система событий в целом рассматривается в разделе События. События, не относящиеся к ОРМ, такие как события, касающиеся соединений и выполнения низкоуровневых операторов, описаны в Основные события.

События сессии

Самые основные крючки событий доступны на уровне объекта ORM Session. Здесь перехватываются следующие типы событий:

  • Операции персистенции - процесс ORM flush, который отправляет изменения в базу данных, может быть расширен с помощью событий, которые срабатывают на разных этапах процесса flush, чтобы дополнить или изменить данные, отправляемые в базу данных, или позволить другим вещам происходить, когда происходит персистенция. Подробнее о событиях персистентности читайте в События постоянства.

  • События жизненного цикла объектов - хуки, когда объекты добавляются, сохраняются, удаляются из сессий. Подробнее об этом читайте в События жизненного цикла объекта.

  • События выполнения - Часть модели выполнения 2.0 style, все операторы SELECT против сущностей ORM, а также массовые операторы UPDATE и DELETE вне процесса flush, перехватываются из метода Session.execute() с помощью метода SessionEvents.do_orm_execute(). Подробнее об этом событии читайте на Выполнение событий.

Обязательно прочитайте главу Отслеживание запросов, изменений объектов и сессий с помощью событий, чтобы узнать контекст этих событий.

События картографа

Крючки событий маппера охватывают события, происходящие с отдельными или несколькими объектами Mapper, которые являются центральным конфигурационным объектом, отображающим определенный пользователем класс на объект Table. Типы событий, происходящих на уровне Mapper, включают:

  • Операции персистентности для каждого объекта - наиболее популярными крючками маппера являются крючки для единицы работы, такие как MapperEvents.before_insert(), MapperEvents.after_update() и т.д. Эти события отличаются от более крупнозернистых событий уровня сессии, таких как SessionEvents.before_flush(), тем, что они происходят внутри процесса flush на основе каждого объекта; в то время как более мелкозернистая деятельность над объектом более проста, доступность функций Session ограничена.

  • События конфигурации маппера - другой основной класс крючков маппера - это те, которые происходят при отображении класса, при завершении работы маппера и при настройке наборов мапперов для обращения друг к другу. Эти события включают MapperEvents.instrument_class(), MapperEvents.before_mapper_configured() и MapperEvents.mapper_configured() на уровне отдельных Mapper и MapperEvents.before_configured() и MapperEvents.after_configured() на уровне коллекций Mapper объектов.

События экземпляра

События экземпляра сосредоточены на построении сопоставленных экземпляров ORM, включая моменты, когда они инстанцируются как объекты transient, когда они загружаются из базы данных и становятся объектами persistent, а также когда над объектом происходят операции обновления или истечения срока действия базы данных.

События атрибутов

События атрибутов запускаются по мере того, как что-то происходит с отдельными атрибутами объектов, сопоставленных с ORM. Эти события формируют основу для таких вещей, как custom validation functions, а также backref handlers.

События запроса

События в области приборостроения

Вернуться на верх