我想编写一个SessionExtension,每次将新的Foo或新Bar提交到数据库时,都会触发'Foo-created'事件或'Bar-created'事件。但是,一旦进入after_commit方法,我不知道在哪里找到已提交的实体。我从哪里获得这些信息?
答案 0 :(得分:2)
Session
实例的属性new
,dirty
,deleted
分别包含已添加,更新和删除的对象。执行after_commit
时,它们已经为空,但在after_flush
中可用。您可以为after_flush
挂钩中的每次刷新扩展自己的已添加实例列表,并将其用于事件并在after_commit
中清除。
答案 1 :(得分:0)
查看Mapper扩展位。它为您提供了插入/更新/删除挂钩之前/之后,您可以为此类事件放置代码。
http://www.sqlalchemy.org/docs/mappers.html?highlight=mapper%20extension#extending-mapper