我正在浏览sqlalchemy Relationship Configuration文档。一对多双向关系的示例如下所示:
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
children = relationship("Child", backref="parent")
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey('parent.id'))
我的理解是backref="parent"
类中的Parent
为Child
类提供了一个Child.parent
属性,该属性链接回原始的Parent
对象。
我不明白为什么Child
对象仍明确需要parent_id
属性?是不是加倍信息?它是否更快地查询数据库或它是否有其他一些好处?也许我误解了双向一对多关系如何起作用?
答案 0 :(得分:1)
children
创建的parent
和relationship
属性仅适用于" python world"你的申请。
相比之下,两个id
列和parent_id
列是数据库中的实际列(本例中唯一的列)。
因此,当您访问类似child.parent
的父级时,sqlalchemy会查找子级parent_id
并从数据库中检索具有此ID的Parent
。
相反,对于parent.children
,sqlalchemy会查找匹配Children
的所有parent_id
个实例。
所以没有重复的信息。
您可以将children
和parent
属性视为便利函数,为您执行数据库逻辑。