我很习惯烧瓶以及它如何与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
我很困惑为什么这不起作用。有人可以协助吗?
答案 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)