【发布时间】:2017-08-16 03:04:27
【问题描述】:
我目前正在通过 flask-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 抛出错误。
【问题讨论】:
标签: python postgresql flask sqlalchemy relationship