Обновить значение, проверяющее предыдущий - SQLObject
В приложении, уже развернутом с использованием 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)
1 ответ
SQLObject имеет несколько уровней API. Невозможно выполнить условное ОБНОВЛЕНИЕ, если вы используете высокоуровневый API (классы, наследуемые SQLObject). where
-clause доступно в обновлении SQLBuilder.