【发布时间】:2014-04-02 02:25:48
【问题描述】:
我在使用 PostgreSQL 的 Pyramid Web 应用程序中遇到了 SQLAlchemy 的约束问题。
我有一个可以处于不同状态的对象:
class Foo(Base):
# -1 - inactive
# 0 - in queue
# 1 - next
# 2 - active
state = Column(
Integer,
nullable=False
)
现在我希望始终只有一个(或没有)对象处于活动状态,只有一个(或没有)对象处于下一个状态,并且对于其他两种状态的对象数量应该没有限制。
如果已经有一个处于该状态的对象(对于下一个状态也是如此),我想创建一个约束或作为约束的东西,它不允许将任何其他对象的状态更改为活动状态。
唯一约束在这里不起作用,因为我只希望某些值是唯一的,而不是全部。 基本上我想要的是,每当我提交事务时,如果它会破坏我所写的约束,则有一种机制不允许事务被提交。 我怎样才能做到这一点?
【问题讨论】:
-
是的,当然。我基本上有一个当前正在进行的任务和一个始终处于就绪状态的任务(下一个)。当任务处于活动状态时,不同的用户可以将其从活动中移除,将下一个任务置于活动状态,将新任务置于就绪状态。如果多个用户同时执行此操作,则会出现问题,这就是为什么我需要这样的约束。
标签: python sql postgresql sqlalchemy pyramid