События ОРМ¶
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.
См.также