sqlalchemy和一对多:为什么孩子有parent_id属性?

时间:2014-08-07 09:08:23

标签: python database database-design sqlalchemy

我正在浏览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"类中的ParentChild类提供了一个Child.parent属性,该属性链接回原始的Parent对象。

我不明白为什么Child对象仍明确需要parent_id属性?是不是加倍信息?它是否更快地查询数据库或它是否有其他一些好处?也许我误解了双向一对多关系如何起作用?

1 个答案:

答案 0 :(得分:1)

children创建的parentrelationship属性仅适用于" python world"你的申请。

相比之下,两个id列和parent_id列是数据库中的实际列(本例中唯一的列)。 因此,当您访问类似child.parent的父级时,sqlalchemy会查找子级parent_id并从数据库中检索具有此ID的Parent。 相反,对于parent.children,sqlalchemy会查找匹配Children的所有parent_id个实例。

所以没有重复的信息。 您可以将childrenparent属性视为便利函数,为您执行数据库逻辑。