如何在SQLAlchemy关系中从父项中删除子项

时间:2017-02-10 19:14:29

标签: python orm sqlalchemy

以下是我的模型(忽略导入):

class Parent(Base):
    __tablename__ = 'parents'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    children = relationship('Child', backref='parent', lazy='dynamic')

class Child(Base):
    __tablename__ = 'children'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    parent_id = Column(Integer, ForeignKey('parents.id'))

接下来,我创建一个父项和一个孩子,并将它们联系起来:

dbsession = session()
child = Child(name='bar')
dbsession.add(child)
parent = Parent(name='foo')
parent.children.append(child)
dbsession.add(parent)
dbsession.commit()

一切正常(因此请忽略我可能将其复制到此处的任何错误)。现在我试图打破这种关系,同时将父母和孩子都保留在数据库中,而且我是空的。

我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我不确定你打破关系的确切含义或原因,但我认为这可行:

child = dbsession.query(Child).filter(Child.name=='bar').one()
child.parent_id = None
dbsession.add(child)
dbsession.commit()

这篇文章提供了有关消隐外键的更多信息:Can a foreign key be NULL and/or duplicate?