什么是SQLAlchemy中使用的relationship()函数

时间:2014-12-25 12:09:55

标签: python flask flask-sqlalchemy

在完成SQLAlchemy的文档时,我似乎无法理解relationship()函数的用途。

我创建了一个包含和不包含relationship()映射的数据库,并且在db级别的表定义中没有看到任何差异。我还注意到通过交互式提示对查询没有影响。没有孩子'列在父表'上创建。它的目的是什么?

 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'))

2 个答案:

答案 0 :(得分:3)

relationship不会影响数据库架构。它提供了访问相关对象的便捷方式。在这种情况下,它允许您通过Child属性与Parent相关的所有children个对象。然后,backref会向所有parent个对象添加Child属性。

默认情况下,相关对象将通过SELECT查询加载。但是,通过将lazy='joined'传递给relationship,查询时将连接两个表。

答案 1 :(得分:3)

dirn's answer是对的。举一些有用的例子:

session = Session()

# create children in a cool way
parent = Parent(children=[Child(), Child()])
# this will save everybody
session.add(parent)
session.commit()

# get every children of a parent is also simple now
parent = session.query(Parent).one()
print(parent.children)