2

在已经部署的应用程序中,使用SQLObject ,只有在前一个值与某个值匹配时,我才需要更新一个值。

等效的 sql 可以是:

UPDATE jobs SET status='150' WHERE id=1234 AND status='100'

我需要这个,因为我们在不同的服务器上有许多守护进程实例(彼此不认识),它们可能想要接受作业并更新数据库以将作业标记为“已接受”。

我想防止两个节点设置相同的值“双重更新”。

如果我能得到受影响的行数,那就太好了。结果为 0 将允许说“作业已在获取和更新之间进行”......

执行更新的代码的实际部分如下所示:

def __setattr__(self, name, value):
    """Override setattr to log build status changes"""
    [...]
    sqlobject.SQLObject.__setattr__(self, name, value)
4

1 回答 1

0

SQLObject 有几个 API 层。如果使用高级 API(SQLObject 继承类),则无法执行条件 UPDATE。where-clause 在 SQLBuilder 的更新中可用。

于 2017-05-07T15:57:50.233 回答