【发布时间】:2022-03-22 14:11:42
【问题描述】:
我在烧瓶中使用 sqlalchemy 作为 ORM,并在我的 Web 应用程序中使用 sqlite 作为数据库。
我的数据库中有 4 个表,我想正确实施 ON DELETE CASCADE,ON UPDATE CASCADE。
我的关系是:
表 Student 和 Subject 与表 Major 是一对多的关系
表格标记是表格主题和学生之间的关联表格
所以预期的行为是:
- 当我删除、更新学生或主题时,对应的行会从标记表(关联表)中删除。
- 当我删除、更新专业时,对应的行已从表 Student 和 Subject 中删除。
这些是我的课程:
class Student(db.Model, UserMixin):
__tablename__ = 'Student'
.......
major_id = db.Column(db.Integer, db.ForeignKey('Major.id'))
class Subject(db.Model, UserMixin):
__tablename__ = 'Subject'
.......
major_id = db.Column(db.Integer, db.ForeignKey('Major.id'))
class Mark(db.Model, UserMixin):
__tablename__ = 'Mark'
.....
stdnt_id = db.Column(db.Integer,db.ForeignKey('Student.regNumber'))
subj_id = db.Column(db.String(5),db.ForeignKey('Subject.code'))
.......
class Major(db.Model, UserMixin):
__tablename__ = 'Major'
............
students = db.relationship('Student', backref='major', lazy='dynamic')
subjects = db.relationship('Subject', backref='major', lazy='dynamic')
我试过了:onupdate="cascade",ondelete="cascade",cascade="all,delete, delete-orphan",passive_deletes=True............
并在我的网络应用程序中对其进行了测试,但无济于事。
注意:我有时检查了我的 sqlite 数据库文件,发现 ON DELETE,UPDATE CASCASE 约束已添加到我的数据库方案中,但级联在我的 wep 应用程序中不起作用。
请帮忙?
【问题讨论】:
-
请参阅Foreign Key Support 部分文档
标签: sqlite flask sqlalchemy