在Flask中删除一对一关系
我现在正在用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')
我想要实现的是,如果我删除用户,就同时删除学生或教授。我尝试用下面的代码进行测试,但当我查看数据库时,发现学生和教授仍然存在,而且我的测试也没有通过。我尝试在设置关系时加入级联删除的参数,但没有效果。我在网上看到可以使用这个参数: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)
如果有人能帮我解决这个问题,我会非常感激。
非常感谢,
Thiago。
1 个回答
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 的相关内容。