【发布时间】:2021-04-24 18:33:47
【问题描述】:
假设我有两张桌子
订单表
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
deliveries = db.relationship("Delivery", back_populates="order")
交货表
class Delivery(db.Model):
id = db.Column(db.Integer, primary_key=True)
status= db.Column(db.String(20))
order_id = db.Column(db.Integer, db.ForeignKey('order.id'), nullable=False)
order = db.relationship("Order", back_populates="deliveries")
一个订单可能有多个交货。交付表的状态字段有以下可能的值["Planned", "Failed", "Delivered"]
问题: 如何确保一个订单没有两个计划交货?
提示: 我知道我可以对多个表实施唯一约束,例如在交付模式中添加下一行
__table_args__ = (db.UniqueConstraint('order_id', 'status', name='_order_status_uc'))
但是通过这样做,我将防止一个订单出现两次失败的交付。
任何帮助将不胜感激,因为我想直接在数据库中强制执行此约束。
【问题讨论】:
-
你使用的数据库引擎是什么?
-
我在使用 PostgreSQL
标签: flask sqlalchemy flask-sqlalchemy