我目前正在建设通过烧瓶SQLAlchemy的使用SQLAlchemy的数据模型防止删除父行,如果它的孩子将在SQLAlchemy的
数据库是
我有麻烦时,PostgreSQL服务器上从具有关系的表中删除行。在这种情况下,我有一些治疗类型和一种治疗方法。该治疗具有指定的单一治疗类型。
只要我有一个或多个治疗分配了特定的治疗类型,我希望治疗类型不能被删除。现在它在我尝试时被删除。
我有以下型号:
class treatment(db.Model):
__tablename__ = 'treatment'
__table_args__ = (db.UniqueConstraint('title', 'tenant_uuid'),)
id = db.Column(db.Integer, primary_key=True)
uuid = db.Column(db.String(), nullable=False, unique=True)
title = db.Column(db.String(), nullable=False)
tenant_uuid = db.Column(db.String(), nullable=False)
treatmentType_id = db.Column(db.Integer, db.ForeignKey('treatmentType.id'))
riskResponse_id = db.Column(db.Integer, db.ForeignKey('riskResponse.id'))
class treatmentType(db.Model):
__tablename__ = 'treatmentType'
__table_args__ = (db.UniqueConstraint('title', 'tenant_uuid'),)
id = db.Column(db.Integer, primary_key=True)
uuid = db.Column(db.String(), nullable=False, unique=True)
title = db.Column(db.String(), nullable=False)
tenant_uuid = db.Column(db.String(), nullable=False)
treatments = db.relationship('treatment', backref='treatmentType', lazy='dynamic')
我可以在我的“删除”认为,检查指定的治疗,删除处理类型之前建立一些逻辑,但在我看来,这应该是一个标准功能的关系数据库。换句话说,我必须做错事。
我删除处理类型,像这样:
entry = treatmentType.query.filter_by(tenant_uuid=session['tenant_uuid']).all()
try:
db.session.delete(entry)
db.session.commit()
return {'success': 'Treatment Type deleted'}
except Exception as E:
return {'error': unicode(E)}
正如我说,这是我能够删除处理类型之前做检查,但我宁愿有,如果有关系SQLAlchemy的抛出一个错误删除前的问题。
谢谢Aelfinn 这是在这种情况下要走的路。目前还有很多类似的情况。 但是当相关项目是可选项时该怎么办? –
答案已经用'passive_deletes ='all''关键字更新 - 这应该会让你找到你想要的。 –