在SQLAlchemy中挂钩实体创建

时间:2010-05-24 07:27:12

标签: sqlalchemy

我想编写一个SessionExtension,每次将新的Foo或新Bar提交到数据库时,都会触发'Foo-created'事件或'Bar-created'事件。但是,一旦进入after_commit方法,我不知道在哪里找到已提交的实体。我从哪里获得这些信息?

2 个答案:

答案 0 :(得分:2)

Session实例的属性newdirtydeleted分别包含已添加,更新和删除的对象。执行after_commit时,它们已经为空,但在after_flush中可用。您可以为after_flush挂钩中的每次刷新扩展自己的已添加实例列表,并将其用于事件并在after_commit中清除。

答案 1 :(得分:0)

查看Mapper扩展位。它为您提供了插入/更新/删除挂钩之前/之后,您可以为此类事件放置代码。

http://www.sqlalchemy.org/docs/mappers.html?highlight=mapper%20extension#extending-mapper