所以我在一对多关系中有两张桌子。当我创建Table1
的新行时,我想用相关的行填充Table2
。但是,此群体实际上涉及使用其他相关表中的数据计算Table2
行。
使用ORM层执行此操作的好方法是什么?也就是说,假设Table1
映射是通过ORM创建的,我应该在哪里/如何调用代码来填充Table2
?
我考虑过使用after_insert
钩子,但我希望将会话传递给填充方法。
感谢。
答案 0 :(得分:1)
您可以使用before_flush
或after_flush
hook,它提供session
。然后,检查新创建的模型的session.new
个对象(提示:使用isinstance(object, ModelClass)
)并在此处完成工作。
事实上,SQLAlchemy recommends before_flush
用于刷新更改。
映射器级别刷新事件仅允许非常有限的操作,仅对正在操作的行的本地属性,以及允许在给定连接上发出任何SQL。请仔细阅读Mapper级别事件的说明,了解使用这些方法的指导原则;通常,SessionEvents.before_flush()方法应该是首选的刷新更改。
答案 1 :(得分:0)
在#sqlalchemy IRC询问后,有人指出这可以使用before_flush
事件监听器中的ORM级关系来完成。
有人解释说,当您通过关系添加映射时,外键会自动填充flush,并由ORM生成相应的insert语句。