Я хочу записать SessionExtension, который запускает событие 'Foo-created' или событие 'Bar-created' каждый раз, когда новый Foo или новая Панель посвящают себя базе данных. Однако однажды в after_commit методе, я не знаю, где найти, какие объекты фиксировались. Где я получаю эту информацию?
Экземпляр сеанса
имеет атрибут новый
, грязный
, удаленный
, содержащий добавленные, обновленные и удаленные объекты соответственно. Они будут уже пустыми при выполнении after_commit
, но они доступны в after_flush
. Вы можете расширить свой собственный список добавленных экземпляров для каждого сброса в ловушке after_flush
и использовать их для событий и очистить в after_commit
.
Посмотрите на биты Mapper Extension. Он предоставляет вам крючки "до/после вставки/обновления/удаления", которые вы можете поместить в свой код для такого рода вещей.
http://www.sqlalchemy.org/docs/mappers.html?highlight=mapper%20extension#extending-mapper