Обновить значение, проверяющее предыдущий - 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.

Другие вопросы по тегам