Vor kurzem habe ich angefangen, es bei der Arbeit zu verwenden und lerne nach und nach.
Wenn Sie es leicht in Worten ausdrücken möchten flush (): Gibt das Abfrageergebnis vorübergehend in der Datenbank wieder (Rollback ist möglich. Wenn Sie also nicht festschreiben (), ist die Abfrage ungültig und Sie müssen am Ende festschreiben ()). commit (): Spiegelt die Abfrageergebnisse in der Datenbank dauerhaft wider (vollständiges Hinzufügen, Aktualisieren und Löschen von Datensätzen)
Für jeden Gebrauch
Es ist praktisch, flush ()
zu verwenden, wenn Sie im Fehlerfall ein Rollback durchführen und es nicht in der Datenbank wiedergeben möchten.
Zum Beispiel
session.begin()
try:
for item in session.query(Model).all():
session.add(Model)
session.flush() # <-In Wartestellung
session.commit() # <-Wird hier dauerhaft in der Datenbank angezeigt
except:
session.rollback() #Verwerfen Sie den Haltezustand und es gibt keine Reflexion in der Datenbank
finally:
session.close() #Der Fehler tritt auf und endet normal. Schließen Sie die Sitzung in beiden Fällen
Im Gegenteil, wenn Sie kein Rollback durchführen möchten, verwenden Sie commit ()
session.begin()
try:
for item in session.query(Model).all():
session.add(Model)
session.commit() # <-Wird jedes Mal dauerhaft in der Datenbank angezeigt
except Exception as e:
print('Error:{}'.format(str(e)))
raise e
finally:
session.close() #Der Fehler tritt auf und endet normal. Schließen Sie die Sitzung in beiden Fällen
Verwenden Sie commit ()
, wenn der Verarbeitungsinhalt am Ende der Verarbeitung in der Datenbank angezeigt werden soll, ohne einen Fehler zu verursachen.
Die offizielle Beschreibung finden Sie in der offiziellen Dokumentation Session.flush(),Session.commit() (Es war ein wenig schwierig, das Dokument zu lesen;)
Weitere Funktionen von commit (), soweit ich dies anhand der offiziellen Dokumentation beurteilen kann · Wenn Sie im Standardmodus eine Sitzung mit autocommit = False verwenden, wird unmittelbar nach dem Festschreiben eine neue Transaktion gestartet.
Mit dieser Funktion frage ich mich, ob session.close () immer noch flush () oder commit () sein kann, ohne eine Sitzung zu erstellen. Wenn jemand es verstehen kann, wäre ich dankbar, wenn Sie es mich wissen lassen könnten.
Recommended Posts