如何使用SQLAlchemy设置和获取关系记录?

时间:2019-02-28 19:22:24

标签: python orm sqlalchemy

文档非常清楚地说明了如何定义关系,例如一对多:

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))

但是它没有给出任何示例来说明如何设置或检索相关的children。例如,如何从数据库中查询Parent并检索其子项的集合,然后添加或删除一些子项?是否有关于每种关系的示例的资源?

1 个答案:

答案 0 :(得分:1)

基于文档中的this tutorial,简短的答案是,当关系由单个对象表示时,如下所示:

class Child:
    parent_id = Column(Integer, ForeignKey('parent.id'))
    parent = relationship("Parent", back_populates="children")

将父类的对象分配给它即可:

parent = Parent()
child.parent = parent

parent = child.parent将检索父对象。根据指南,这种情况是由于属性变化事件而发生的,并在Python中进行了评估。当关系由集合表示时,各种集合类型(例如集合和字典)都是可能的,但是默认类型是Python列表

class Parent:
    children = relationship("Child", back_populates="parent")

因此,您可以在此处分配子对象的列表:

parent.children = [
    Child(),
    Child()
]

或从children属性中检索对象列表并进行修改。