【问题标题】:delete one-to-one relationship in flask删除烧瓶中的一对一关系
【发布时间】:2014-07-26 11:34:11
【问题描述】:

我目前正在使用烧瓶开发应用程序,但在删除一对一关系中的项目时遇到了很大问题。我的模型中有以下结构:

class User(db.Model):
   __tablename__ = 'user'
   user_id = db.Column(db.String(8), primary_key = True)
   password = db.Column(db.String(26))

class Student(db.Model):
   __tablename__ = 'student'
   user_id = Column(db.String(8), ForeignKey('user.user_id'), primary_key = True)
   user = db.relationship('User')

class Professor(db.Model):
   __tablename__ = 'professor'
   user_id = Column(db.String(8), ForeignKey('user.user_id'), primary_key = True)
   user = db.relationship('User')

如果我删除用户,我想做的是删除学生或教授。我尝试使用下面的代码对其进行测试,但是,当我检查我的数据库时,学生和教授仍然在那里,我的测试没有通过。我在设置关系时尝试包含级联参数,但它不起作用。我在网上找到了使用这个参数:single_parent=True,但它也不起作用。

user1 = User(user_id='user1234',password='alsdjwe1')
user2 = User(user_id='user2345',password='asfr5421')
student1 = Student(user = user1)
professor1 = Professor(user = user2)
db.session.delete(user1)
db.session.delete(user2)

如果有人能帮我解决这个问题,我会很高兴。

非常感谢,

蒂亚戈。

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    在您的关系中使用 cascade 参数。

    class Student(db.Model):
        __tablename__ = 'student'
        user_id = Column(db.String(8), ForeignKey('user.user_id'), primary_key = True)
        user = db.relationship('User', cascade='delete')
    
    class Professor(db.Model):
        __tablename__ = 'professor'
        user_id = Column(db.String(8), ForeignKey('user.user_id'), primary_key = True)
        user = db.relationship('User', cascade='delete')
    

    如果您的用例需要,您可能需要查看delete-orphan

    【讨论】:

    • 我已经尝试过您的解决方案,但它本身不起作用。我必须在 User 类中插入一个 delete-orphan 方法才能使其工作。它删除了学生和教授,但是,它不会删除学生与另一个名为 Courses 的类的关系,Student 以多对多关系链接到该类。因此,即使我删除了学生,我的数据库中的 Students_Courses 表仍保留学生的 ID 和课程。我不知道它是否有足够的信息,但如果你不理解我解释的内容,我也会编辑并插入课程类。谢谢:)
    猜你喜欢
    • 2021-09-29
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2016-12-26
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    相关资源
    最近更新 更多