Python 无法删除一对多关系中的父记录-Flask SqlAlchemy
我已经用一对多关系的炼金术创建了3个简单模型。以下是模型的代码:Python 无法删除一对多关系中的父记录-Flask SqlAlchemy,python,mysql,flask,one-to-many,flask-sqlalchemy,Python,Mysql,Flask,One To Many,Flask Sqlalchemy,我已经用一对多关系的炼金术创建了3个简单模型。以下是模型的代码: class UsersModel(BaseModel, UserMixin): __tablename__ = 'user' email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) confirmed_at = db.Column(db.DateTime()) info = db.
class UsersModel(BaseModel, UserMixin):
__tablename__ = 'user'
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
confirmed_at = db.Column(db.DateTime())
info = db.relationship('UserInfoModel', backref="user", cascade="all, delete" , lazy='dynamic')
notes = db.relationship('NotesModel', backref="owner", cascade="all, delete" , lazy='dynamic')
class UserInfoModel(db.Model):
__tablename__ = 'user_info'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
first_name = db.Column(db.String(55))
last_name = db.Column(db.String(55))
age = db.Column(db.Integer)
profession = db.Column(db.String(255))
class NotesModel(BaseModel):
__tablename__ = 'notes'
title = db.Column(db.String(255), nullable=False)
desc = db.Column(db.Text)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
我可以毫无问题地插入和检索关系数据,但当我试图删除用户时,它还应该删除注释和信息,而不是给出错误,不允许我删除。下面是我看到的错误:但是,如果我删除注释和信息,然后尝试删除用户,它就会工作。它在做相反的事情。我尝试使用“删除孤儿”,但没有成功。我已经阅读了文档并阅读了一些关于它的博客,但没有任何帮助。我说的关系不对吗?如果是,请帮助我实现这一点,或者帮助我查找代码中的错误。
感谢你的帮助,谢谢
更新:添加删除孤立项后,我可以从会话中删除数据,但不能从phpmyadmin中删除数据。我认为您希望将关系定义为与您拥有关系的方式相反,如下所示:
class UsersModel(BaseModel, UserMixin):
__tablename__ = 'user'
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
confirmed_at = db.Column(db.DateTime())
class UserInfoModel(db.Model):
__tablename__ = 'user_info'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
first_name = db.Column(db.String(55))
last_name = db.Column(db.String(55))
age = db.Column(db.Integer)
profession = db.Column(db.String(255))
user = db.relationship('User',uselist=False, cascade='all, delete-orphan',backref=db.backref('info', uselist=False))
class NotesModel(BaseModel):
__tablename__ = 'notes'
title = db.Column(db.String(255), nullable=False)
desc = db.Column(db.Text)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship('User',uselist=False, cascade='all, delete-orphan',backref=db.backref('notes'.lazy='dynamic'))
这样
cascade="all,delete"
是BaseModel继承自db.Model。BaseModel有一些公共字段…谢谢你的回答,但我已经更新了这个问题。事实上,我认为我已经正确地定义了关系,并且在使用db会话删除时它可以工作。但尝试从phpmyadmin中删除时出错。请添加一些文本来解释您的答案