简体   繁体   English

无法删除一对多关系中的父记录 - Flask-SqlAlchemy

[英]Unable to delete parent record in one to many relationship - Flask-SqlAlchemy

I've created to 3 simple model with flask-sqlalchemy with one to many relationship. 我创建了3个简单的模型与flask-sqlalchemy有一对多的关系。 Here is the code for models: 这是模型的代码:

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

I can insert and retrive relational data without any problem but when I'm trying to delete a user it should also delete notes & info rather it gives error and don't let me delete. 我可以毫无问题地插入和检索关系数据,但是当我试图删除用户时,它也应该删除注释和信息,而不是它给出错误,不要让我删除。 Here is the error that I see: http://prntscr.com/ek5cx1 这是我看到的错误: http//prntscr.com/ek5cx1
But if I delete notes & info and then try to delete user it works. 但如果我删除笔记和信息,然后尝试删除用户,它的工作原理。 It's doing the reverse. 它正在做相反的事情。 I tried using 'delete-orphan' but didn't worked. 我尝试使用'delete-orphan'但没有奏效。 I have read the documentation and read some blog about it but nothing helps. 我已阅读文档并阅读了一些关于它的博客,但没有任何帮助。 Am I wrong about declaring the relation? 我对宣布这种关系是错误的吗? If so please help me to implement this or help me to find error within my code. 如果是这样,请帮助我实现这一点或帮助我在我的代码中找到错误。
Appriciate your help, Thanks 感谢您的帮助,谢谢

Update: After adding delete-orphan I can delete data from session but not form phpmyadmin. 更新:添加delete-orphan后,我可以从会话中删除数据,但不能从phpmyadmin中删除。

i think you want your relationships defined opposite how you have them, so like this: 我想你希望你的关系定义与你拥有它们的方式相反,所以你喜欢这样:

       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"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM