在SqlAlchemy ORM中填充相关表

时间:2017-10-05 21:11:53

标签: python sql database orm sqlalchemy

所以我在一对多关系中有两张桌子。当我创建Table1的新行时,我想用相关的行填充Table2。但是,此群体实际上涉及使用其他相关表中的数据计算Table2行。

使用ORM层执行此操作的好方法是什么?也就是说,假设Table1映射是通过ORM创建的,我应该在哪里/如何调用代码来填充Table2

我考虑过使用after_insert钩子,但我希望将会话传递给填充方法。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用before_flushafter_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语句。