我有一些模型,它们之间定义了如下关系:
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True, nullable=False)
children = Relationship(Child, lazy='joined')
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True, nullable=False)
father_id = Column(Integer, ForeignKey('parent.id'), nullable=False)
如果我在会话中添加一个子项(使用session.add(Child(...))
),那么在刷新会话后,我希望其父项的子项关系将更新以包括此子项。然而,我没有看到这一点。parent = session.query(Parent).get(parent_id)
num_children = len(parent.children)
# num_children == 3, for example
session.add(Child(father_id=parent_id))
session.flush()
new_num_children = len(parent.children)
# num_children == 3, it should be 4!
非常感谢任何帮助!
我可以直接将新的子项添加到parent.children
列表中,并刷新会话,但由于其他现有代码的原因,我想使用session.add
来添加它。
我还可以在添加子项后执行commit
,这确实会正确更新parent.children
关系,但我不想在该点提交事务。
我尝试了向children
关系添加一个backref
,但似乎没有什么区别。