[PYTHON] Unterschied zwischen SQLAlchemy flush () und commit ()

Erklärt, wie Sie flush () und commit () richtig verwenden, wenn Sie Tabellendatensätze mit SQLAlchemy bearbeiten, einem der O / R-Mapper von Python.

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

Unterschied zwischen SQLAlchemy flush () und commit ()
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Unterschied zwischen Prozess und Job
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Unterschied zwischen Regression und Klassifikation
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen list () und [] in Python
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen sortiert und sortiert (Denkmal)
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
Unterschied zwischen SQL Alchemy back_populated und backref und wenn keiner verwendet wird
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
[Xg Boost] Unterschied zwischen Softmax und Softprob
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
[Django ORM] Unterschied zwischen Werten () und nur ()
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
Unterschied zwischen Docker-Compose-Datei env_file und .env-Datei
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Geschwindigkeitsunterschied zwischen wsgi, Flasche und Flasche
Unterschied zwischen numpy.ndarray und list (Dimension, Größe)
Unterschied zwischen ls -l und cat Befehl
Differenz- und Kompatibilitätsprüfung zwischen Keras und tf.keras # 1
Was ist der Unterschied zwischen "pip" und "conda"?
Unterschied zwischen Verwendung und Import in der Schildsprache
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Über den Unterschied zwischen "==" und "is" in Python
Über den Unterschied zwischen PostgreSQL su und sudo
Was ist der Unterschied zwischen Unix und Linux?
Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Grober Unterschied zwischen Unicode und UTF-8 (und seinen Begleitern)
Kann BERT den Unterschied zwischen "Ame (Süßigkeiten)" und "Ame (Regen)" verstehen?
Zwischen parametrisch und nicht parametrisch
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Was ist der Unterschied zwischen usleep, nanosleep und clock_nanosleep?
Verwenden Sie SQL Alchemy und Multiprocessing
Unterschied zwischen Numpy (n,) und (n, 1) Notation [Unterschied zwischen horizontalem Vektor und vertikalem Vektor]
Unterschied zwischen return, return None und no return description in Python
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Was ist der Unterschied zwischen symbolischen und harten Links?
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Python> Unterschied zwischen Inpbt- und Print-Ausgabe (Inpbt)> [1. 2. 3.] / Array ([1., 2., 3.], dtype = float32)
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
Listenverkettungsmethode in Python, Unterschied zwischen list.extend () und dem Operator "+"
Unterschied zwischen Vordergrundprozess und Hintergrundprozess, prinzipiell verstanden
Konvertierung zwischen Unixtime und Datetime
Python-Metaklasse und SQLalchemie deklarativ