【问题标题】:SQLAlchemy with Sqlite ON DELETE,UPDATE CASCADE not workingSQLAlchemy with Sqlite ON DELETE,UPDATE CASCADE 不工作
【发布时间】: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 应用程序中不起作用。

请帮忙?

【问题讨论】:

标签: sqlite flask sqlalchemy


【解决方案1】:

我尝试并测试了许多链接,但无法删除父链接。直到我得到一个可以删除父级并自动删除其所有子级的链接。但无法更新。这是下面的简化代码,

class Parent(db.Model):
    __tablename__ = 'parent'
    id = db.Column(db.Integer, primary_key=True)
    children = db.relationship(
        "Child", back_populates="parent",
        cascade="all, delete",
        passive_deletes=True
    )

class Child(db.Model):
    __tablename__ = 'child'
    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id', ondelete="CASCADE"))
    parent = db.relationship("Parent", back_populates="children")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2015-01-27
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多