删除烧瓶中的一对一关系

时间:2014-07-26 11:34:12

标签: python flask sqlalchemy flask-sqlalchemy

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

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')

如果删除用户,我想删除学生或教授。我尝试使用下面的代码测试它,但是,当我检查我的数据库时,学生和教授仍在那里,我的测试没有通过。我设置关系时尝试包含cascade参数,但它不起作用。我在互联网上发现使用此参数: 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)

如果有人可以帮助我,我会很高兴。

非常感谢,

蒂亚戈。

1 个答案:

答案 0 :(得分: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