Orm SQLAlchemy中相互依赖表中的级联删除

Orm SQLAlchemy中相互依赖表中的级联删除,orm,sqlalchemy,foreign-keys,cascade,sql-delete,Orm,Sqlalchemy,Foreign Keys,Cascade,Sql Delete,我的两个数据库表的外键相互指向。这是通过MySQL通过SQLAlchemy实现的。我希望这样,当我删除父行时,所有子行都会被删除。我的模式(简化)如下所示: Parent(id, child_id, another_child_id) Child(id, parent_id) 我已经在子模型定义中的父关系上设置了ondelete='CASCADE' 根据SQLAlchemy文档上的说明,您所需要做的就是设置更新后,这样可以在不遇到关键约束错误的情况下为您删除子项 不幸的是,我认为我的情况很奇

我的两个数据库表的外键相互指向。这是通过MySQL通过SQLAlchemy实现的。我希望这样,当我删除父行时,所有子行都会被删除。我的模式(简化)如下所示:

Parent(id, child_id, another_child_id)

Child(id, parent_id)
我已经在子模型定义中的父关系上设置了
ondelete='CASCADE'

根据SQLAlchemy文档上的说明,您所需要做的就是设置
更新后
,这样可以在不遇到关键约束错误的情况下为您删除子项

不幸的是,我认为我的情况很奇怪,因为我在父项中有两列指向子项,这与文档中的示例不同。当我尝试删除父项时,父项中的以下关系配置给了我一个外键约束错误(因为
Parent\u id
取决于现有的父项):

我能让它工作的唯一方法是在任一列上放置一个
cascade='delete'
标志:

child = relationship('Child', 
    primaryjoin='Child.id==Article.child_id',
    post_update=True,
    cascade='delete')
another_child = relationship('Child', 
    primaryjoin='Child.id==Article.another_child_id',
    post_update=True)
奇怪的是,当我把
cascade='delete'
放在两列上时,就会出现各种各样的问题。例如:

c = Child()
p = Parent()
p.child = c
p.another_child = c
session.add(p)
session.commit()
上述代码将在数据库中创建父项,但
子项id
另一个子项id
列为空。甚至从未创建子行

有人能解释一下为什么
cascade='delete'
能够解决我的问题,将删除级联到子项,而不是在子外键上设置
ondelete='cascade'
?还有,为什么它只在其中一种关系上有效,而不是在两种关系上都有效(这在我看来更符合逻辑)

c = Child()
p = Parent()
p.child = c
p.another_child = c
session.add(p)
session.commit()