Mysql 如何在SQLAlchemy中删除多对一关系中的子项?

Mysql 如何在SQLAlchemy中删除多对一关系中的子项?,mysql,python-3.x,sqlalchemy,Mysql,Python 3.x,Sqlalchemy,首先,我有如下表格: class Parent(db.Model): __tablename__= "parent" id = db.Column("parent_id", db.Integer, primary_key=True) childFirst = db.Column(db.Integer, db.ForeignKey('childFirst.childFirst_id')) childSecond = db.Column(db.Integer, d

首先,我有如下表格:

 class Parent(db.Model):
    __tablename__= "parent"

    id = db.Column("parent_id", db.Integer, primary_key=True)
    childFirst = db.Column(db.Integer, db.ForeignKey('childFirst.childFirst_id'))
    childSecond = db.Column(db.Integer, db.ForeignKey('childSecond.childSecond_id'))
    childThird = db.Column(db.Integer, db.ForeignKey('childThird. childThird_id'))

    child_first = db.relationship("ChildFirst")
    child_second = db.relationship("ChildSecond")
    child_third = db.relationship("ChildThird")

 class ChildFirst(db.Model):
    __tablename__ = "childFirst"

    id = db.Column("childFirst_id", db.Integer, primary_key=True)
    ...

 class ChildSecond(db.Model):
    __tablename__ = "childSecond"

    id = db.Column("childSecond_id", db.Integer, primary_key=True)
    ...

 class ChildThird(db.Model):
    __tablename__ = "childThird"

    id = db.Column("childThird_id", db.Integer, primary_key=True)
    ...
因此,我建立了多对一关系,如文档所示

但是当我试图删除其中一个孩子时,我得到了一个错误 错误:

实际上,我正试图用这个命令->child\u CLASS.query.filter\u byid=.delete来删除child

最后,我使用的是mysql数据库

那么,怎么了


谢谢并致以最诚挚的问候。

当我删除子行时,我已成功删除

代码:

但是有什么区别呢?

无法删除或更新父行的错误说明了一切。即使您在这里使用了术语Child和Parent,但在您的案例中,实际的子对象是父对象,而父对象实际上是子对象。要理解这一点,只需注意父表包含“其”父表的引用id,即子表

简单地说,数据库不能允许您删除子类的成员,因为父类的成员具有对它的引用-这是引用完整性


要成功完成此操作,您需要告诉数据库,当父项被删除时,它应该如何处理这些情况—即通过级联。有关级联选项,请查看。

我相信这是您问题的一部分。考虑修改你的问题,而不是把它作为一个答案。
'Cannot delete or update a parent row: a foreign key constraint fails (`<DB_NAME>`.`<PARENT_NAME>`, CONSTRAINT `<PARENT_NAME>_ibfk_3` FOREIGN KEY (`<CHILD_ID_COLUMN>`) REFERENCES `<CHILD_TABLE_NAME>` (`<CHILD_ID_COLUMN>`))')
[SQL: DELETE FROM CHILD_TABLE_NAME WHERE <CHILD_TABLE_NAME>.<CHILD_ID_COLUMN> = %(<CHILD_ID_COLUMN>_1)s]
child = <CHILD_CLASS>.query.filter_by(id=<id>).first()
db.session.delete(child)
db.session.commit()