mysql - 如何在 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, 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)
...
所以,我建立了多对一的关系,如此处所述
但是,当我尝试删除其中一个 Childs 时,我收到一个错误错误:
'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_CLASS.query.filter_by(id=<id_variable>).delete()
最后,我使用的是 mysql 数据库。
那么,怎么了?
谢谢和最好的问候..
解决方案
这个错误Cannot delete or update a parent row
让一切都清楚了。即使您在这里使用术语 Child 和 Parent ,但在您的情况下,实际的 child 是 the Parent
,而 parent 实际上是Child
。要理解这一点,只需注意该Parent
表包含“其”父级的引用 id,即Child table
.
简而言之,数据库不允许您删除 Child 类的成员,因为 Parent 类的成员具有对它的引用——这就是引用完整性。
要成功执行此操作,您需要告诉数据库在删除父级时它应该如何处理案例 - 即通过级联。对于级联选项,请查看SQLAlchemy 文档。
推荐阅读
- php - 使用引导模式更新数据
- nativescript - NativeScript 上的 DateTimeRangePicker
- data-structures - 这是一个有效的二叉树吗?
- html - 为什么我在这个网站上的移动菜单可以在浏览器上运行,但不能在实际的移动设备上运行?
- c# - 使用 C# 的 Azure Blob 存储“找不到方法”
- python - 为什么 psycopg2 INSERT 需要这么长时间才能循环运行,我该如何加快速度?
- sql - 将“名称”列中具有相同值的所有行合并为一行
- c++ - 是否可以使用 C++/WinRT 创建 Windows 服务应用程序?
- php - 一次循环一个结果
- oracle - 即使列有前缀,“列定义不明确的错误”?