2

SQLObjectを使用して既にデプロイされているアプリケーションでは、以前の値が特定の値と一致する場合にのみ、値を更新する必要があります。

同等の sql は次のようになります。

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

これが必要なのは、ジョブを取得し、データベースを更新してジョブを「取得済み」としてマークする必要がある可能性がある、さまざまなサーバー (お互いを認識していない) にデーモンのインスタンスが多数あるためです。

同じ値を設定する 2 つのノードからの「二重更新」を防止したいと考えています。

結果として、影響を受ける行の数を取得できればいいのにと思います。結果が 0 の場合、「ジョブはフェッチと更新の間で既に取得されています」と言うことができます...

更新を行うコードの実際の部分は次のようになります。

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

1 に答える 1