Postgresql 布尔列上的sqlalchemy约束,允许对具有相同外键的多行使用单个true

Postgresql 布尔列上的sqlalchemy约束,允许对具有相同外键的多行使用单个true,postgresql,sqlalchemy,flask-sqlalchemy,Postgresql,Sqlalchemy,Flask Sqlalchemy,我有下表 id |属性| id |照片| url |是最好的 ----|-------------|-----------|--------- 1 | 1 |测试1 |正确 2 | 1 |测试2 |错误 3 | 1 |测试3 |错误 4 | 2 | mest1 |正确 5 | 2 | mest2 |错误 6 | 3 | jest1 |错误 其中属性_id是外键。 我需要一个约束来限制具有相同属性id的行上is_best列的多个真值 例如,对于id=2或id=3或其中id=5,限制更新是_be

我有下表

id |属性| id |照片| url |是最好的
----|-------------|-----------|--------- 
1 | 1 |测试1 |正确
2 | 1 |测试2 |错误
3 | 1 |测试3 |错误
4 | 2 | mest1 |正确
5 | 2 | mest2 |错误
6 | 3 | jest1 |错误
其中属性_id是外键。 我需要一个约束来限制具有相同属性id的行上is_best列的多个真值

例如,对于id=2或id=3或其中id=5,限制更新是_best=True

理想情况下,我需要sqlalchemy中的此功能。但postgres代码也很好

我正在用sqlalchemy创建表格,如下所示:

class PropertyPhoto(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    property_id = db.Column(db.Integer,
                            db.ForeignKey('property.id'),
                            nullable=False,
                            onupdate='CASCADE',
                            ondelete='CASCADE')
    photo_url = db.Column(db.String, nullable=False, unique=True)
    is_best = db.Column(db.Boolean, default=False)

在Postgres中,您可以使用过滤后的唯一索引执行此操作:

create unique index on the_table (property_id)
where is_best;

在Postgres中,您可以使用过滤后的唯一索引执行此操作:

create unique index on the_table (property_id)
where is_best;