[英]Populating related table in SqlAlchemy ORM
因此,我在一对多关系中有两个表。 当我创建Table1
的新行时,我想用相关行填充Table2
。 但是,此填充实际上涉及使用其他相关表中的数据来计算Table2
行。
使用ORM层执行此操作的好方法是什么? 也就是说,假设Table1
映射是通过ORM创建的,那么我应该在哪里/如何调用代码来填充Table2
?
我考虑过使用after_insert
挂钩,但是我想有一个会话传递给填充方法。
谢谢。
您可以使用before_flush
或after_flush
钩子 ,它提供了一个session
。 然后,您可以检查session.new
对象中是否有新创建的模型(提示:使用isinstance(object, ModelClass)
)并在此处进行工作。
实际上,对于刷新更改,SQLAlchemy 建议使用 before_flush
作为常规命令。
映射器级别的刷新事件仅允许对仅要操作的行所在的本地属性进行非常有限的操作,并且允许在给定的Connection上发出任何SQL。 请完整阅读Mapper级活动中的注释,以获取有关使用这些方法的指南; 通常,一般冲洗时应首选SessionEvents.before_flush()方法。
在#sqlalchemy IRC中询问后,有人指出,可以使用before_flush
事件侦听器中的ORM级关系来完成此操作。
据解释,当您通过关系添加映射时,外键将在刷新时自动填充,并且由ORM生成适当的insert语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.