Récemment, j'ai commencé à l'utiliser au travail et j'apprends petit à petit.
Si vous voulez l'exprimer facilement avec des mots flush (): reflète temporairement le résultat de la requête dans la base de données (le rollback est possible, donc si vous ne commettez pas (), la requête sera invalide et vous devrez commettre () à la fin) commit (): reflète en permanence les résultats de la requête dans la base de données (ajout complet, mise à jour et suppression d'enregistrements)
Pour chaque utilisation
Il est pratique d'utiliser flush ()
lorsque vous voulez revenir en arrière en cas d'erreur et que cela ne soit pas reflété dans la base de données.
Par exemple
session.begin()
try:
for item in session.query(Model).all():
session.add(Model)
session.flush() # <-En attente
session.commit() # <-Reflété en permanence dans la base de données ici
except:
session.rollback() #Ignorez l'état de maintien et il n'y a aucune réflexion dans la base de données
finally:
session.close() #L'erreur se produit et se termine normalement, fermez la session dans les deux cas
Au contraire, si vous ne voulez pas revenir en arrière, utilisez commit ()
session.begin()
try:
for item in session.query(Model).all():
session.add(Model)
session.commit() # <-Reflété en permanence dans la base de données à chaque fois
except Exception as e:
print('Error:{}'.format(str(e)))
raise e
finally:
session.close() #L'erreur se produit et se termine normalement, fermez la session dans les deux cas
Utilisez commit ()
si vous voulez que le contenu du traitement soit reflété dans la base de données à la fin du traitement sans provoquer d'erreur.
La description officielle est dans la documentation officielle Session.flush(),Session.commit() (C'était un peu difficile de lire le document;)
Autres fonctionnalités de commit (), pour autant que je sache en lisant la documentation officielle · Si vous utilisez une session avec autocommit = False en mode par défaut, une nouvelle transaction sera lancée immédiatement après la validation.
Avec cette fonctionnalité, je me demande si session.close () peut encore être flush () ou commit () sans créer de session? Si quelqu'un peut le comprendre, je vous serais reconnaissant de bien vouloir me le faire savoir.
Recommended Posts