在完成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'))
答案 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)