2016-07-25 2 views
2

In einer bereits implementierten Anwendung, die SQLObject verwendet, muss ich einen Wert nur aktualisieren, wenn der vorherige Wert einem bestimmten Wert entspricht.Aktualisiere Wertüberprüfung vorheriger - SQLObject

Das könnte entsprechende SQL sein:

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

ich das brauchen, weil wir die viele Instanzen eines Dämons auf verschiedenen Servern (nicht zu wissen, jeder andere), die wünschen können, nehmen Aufträge und aktualisieren Sie die db markieren haben Job als "genommen".

Ich möchte "doppelte Updates" von zwei Knoten verhindern, die den gleichen Wert einstellen.

Es wäre schön, wenn ich als Ergebnis die Anzahl der betroffenen Zeilen erhalten könnte. Mit einem Ergebnis von 0 würde es erlauben, zu sagen: „Job bereits zwischen holen und zu aktualisieren genommen wurde“ ...

Der eigentliche Teil des Codes das Update durchführt wie folgt aussieht:

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

Antwort

0

SQLObject ein paar API hat Lagen. Es gibt keine Möglichkeit, ein bedingtes UPDATE auszuführen, wenn Sie die High-Level-API (SQLObject-inheried classes) verwenden. where -clause ist in SQLBuilders Update verfügbar.