为什么我的子模型在删除关联父项时会在数据库中保留?

时间:2016-01-13 18:08:07

标签: python flask flask-sqlalchemy

我很习惯烧瓶以及它如何与Sqlalchemy一起使用。我想要的是在子元素及其父元素之间建立一对一的关系级联以便删除。

对于我的情况,我有一个Employee类,其中有一个Photo与之关联。下面的代码显示了我如何连线:

class Photo(db.Model):
    __tablename__ = 'photos'
    id = db.Column(db.Integer, primary_key=True)
    image = db.Column(db.String(200))
    image_storage_type = db.Column(db.String(255), default='')
    image_storage_bucket_name = db.Column(db.String(255), default='')

    def __init__(self, image='', image_storage_type='', image_storage_bucket_name=''):
        self.image = image
        self.image_storage_type = image_storage_type
        self.image_storage_bucket_name = image_storage_bucket_name

    def __repr__(self):
        return '<Photo %r>' % self.image

class Employee(db.Model):
    __tablename__ = 'employees'
    id = db.Column(db.Integer, primary_key=True)
    photo_id = db.Column(db.Integer, db.ForeignKey(Photo.id))
    photo = db.relationship("Photo", backref=db.backref('employee', cascade='delete', uselist=False))
    name = db.Column(db.String(200))
    title = db.Column(db.String(200))
    email = db.Column(db.String(200))
    department = db.Column(db.String(200))

    def __init__(self, name='', title='', email='', department='', photo=Photo()):
        self.name = name
        self.title = title
        self.email = email
        self.department = department
        self.photo = photo

    def __repr__(self):
        return '<User %r>' % self.name

我在Employee上指定了cascade='delete',因此级联应该可以工作但它失败了。关联在那里,我能够查询但删除无法执行。我按照SQLalchemy文档和我找到的这个堆栈溢出问题http://stackoverflow.com/questions/24970594/delete-one-to-one-relationship-in-flask

我很困惑为什么这不起作用。有人可以协助吗?

1 个答案:

答案 0 :(得分:0)

我找到了答案。我需要更改我的代码:

photo = db.relationship("Photo", backref=db.backref('employee', cascade='delete', uselist=False))

进入这个:

 photo = db.relationship("Photo", backref='employee', cascade='all, delete', uselist=False)