Wie überprüft man, ob die SQLAlchemy Sitzung schmutzig ist oder nicht?

8

Ich habe ein SQLAlchemy Session -Objekt und möchte wissen, ob es schmutzig ist oder nicht. Die genaue Frage, die ich (metaphorisch) an die Session stellen möchte, lautet: "Wenn ich an dieser Stelle ein commit() oder ein rollback() ausstelle, ist der Effekt auf die Datenbank gleich oder nicht?".

Die Begründung ist folgende: Ich möchte den Benutzer fragen, ob er die Änderungen bestätigen möchte oder nicht. Aber wenn es keine Änderungen gibt, möchte ich nichts fragen. Natürlich kann ich selbst alle Operationen überwachen, die ich an der Session durchführe, und entscheiden, ob es Änderungen gibt oder nicht, aber wegen der Struktur meines Programms würde dies einige ziemlich einschneidende Änderungen erfordern. Wenn SQLAlchemy diese Möglichkeit bereits anbietet, würde ich es gerne nutzen.

Danke allen.

    
Giovanni Mascellani 27.04.2013, 20:54
quelle

3 Antworten

10

Sie suchen nach einer Nettozahl von tatsächlichen Flushes, die während der gesamten Zeitspanne der Sitzung stattgefunden haben; Während es einige Hinweise darauf gibt, ob dies geschehen ist oder nicht (der "Schnappschuss" genannt wird), dient diese Struktur nur dazu, bei Rollbacks zu helfen, und ist nicht stark referenzierend. Der direkteste Weg dahin wäre das Nachverfolgen von "after_flush" -Ereignissen, da dieses Ereignis nur emittiert wird, wenn flush aufgerufen wurde und auch der flush-Zustand flush gefunden wurde:

%Vor%     
zzzeek 29.04.2013, 19:44
quelle
2

Die Sitzung hat ein schmutziges Attribut

session.dirty

persistente Objekte, die gerade Änderungen erkannt haben (Diese Sammlung wird jetzt bei jedem Aufruf der Eigenschaft im laufenden Betrieb erstellt.)

sqlalchemy.orm.session.Session.dirty

    
Yoriz 27.04.2013 21:43
quelle
0

Sitzungen haben ein privates _is_clean() -Member, das scheinbar "true" zurückgibt, wenn die Datenbank nicht gelöscht werden kann. Die Tatsache, dass es privat ist, kann jedoch bedeuten, dass es nicht für den externen Gebrauch geeignet ist. Ich würde nicht aufhören, dies persönlich zu empfehlen, da jeder Fehler hier offensichtlich zu Datenverlust für Ihre Benutzer führen könnte.

    
Kylotan 27.04.2013 21:26
quelle

Tags und Links