gpt4 book ai didi

python - 用于更新表的 SQLAlchemy 自定义约束

转载 作者:行者123 更新时间:2023-11-28 22:51:02 25 4
gpt4 key购买 nike

我在使用 PostgreSQL 的 Pyramid Web 应用程序中遇到 SQLAlchemy 约束问题。

我有一个可以处于不同状态的对象:

class Foo(Base):

# -1 - inactive
# 0 - in queue
# 1 - next
# 2 - active
state = Column(
Integer,
nullable=False
)

现在我希望始终只有一个(或没有)对象处于事件状态,只有一个(或没有)对象处于下一个状态,并且对其他两个状态的对象数量应该没有限制。

我想做一个约束或充当约束的东西,如果已经有一个对象处于该状态(下一个状态也是如此),则不允许将任何其他对象的状态更改为事件状态。

唯一约束在这里不起作用,因为我只希望某些值是唯一的,而不是所有值。基本上我想要的是,每当我提交事务时,如果事务会破坏我写的约束,就会有一种机制不允许提交事务。我怎样才能做到这一点?

最佳答案

PostgreSQL 通过部分唯一索引支持这一点。

CREATE UNIQUE INDEX foo_only_one_active ON foo(state) WHERE (state = 'active');

CREATE UNIQUE INDEX foo_only_one_active ON foo(state) WHERE (state = 'next');

将限制表格,以便只有一行可能具有状态“事件”或“下一个”。如果愿意,您可以使用带有 state IN ('active', 'next') 的单个索引,但我认为这种形式更有可能实际用于查询 state = ' active'state = 'next'。

关于python - 用于更新表的 SQLAlchemy 自定义约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com