Configurer une session avec SQLAlchemy pour des transactions
Configurer une session avec SQLAlchemy permet de gérer des interactions avec la base de données de manière cohérente et contrôlée. Cela inclut des transactions qui garantissent que les modifications apportées aux données soient correctement validées (commit) ou annulées (rollback) en cas d’erreur, assurant ainsi l’intégrité des données.
Fonctions :
-
Configurer une session
La session SQLAlchemy est l’interface principale pour gérer la communication avec la base de données en mode ORM. Elle permet de : Effectuer des transactions complexes (ajouts, suppressions, modifications, etc.). Contrôler les transactions (commit, rollback). Gérer les cycles de vie des objets chargés depuis la base de données. La configuration d'une session via sessionmaker() permet de créer plusieurs instances de session réutilisables, adaptées aux applications complexes (transactions multiples, rollback sur erreur, etc.).
Importation :
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker
Attributs :
Paramètre Type Description bind
Engine ou Connection L’engine ou la connexion auquel la session est liée autocommit
(optionnel)bool Si True
, les transactions sont automatiquement validées (déconseillé)expire_on_commit
(optionnel)bool Si False
, les objets restent accessibles après commit sans rechargementExemple de code :
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # Création de l'engine de connexion engine = create_engine('sqlite:///base_de_donnees.db') # Création du factory de sessions Session = sessionmaker(bind=engine) # Démarrage d'une session session = Session() try: # Exemple de transaction complexe utilisateur = Utilisateur(nom='Jean', age=28) session.add(utilisateur) produit = Produit(nom='Clavier', prix=49.99) session.add(produit) # Commit de la transaction session.commit() except Exception as e: print("Erreur détectée :", e) # Annulation en cas d'erreur session.rollback() finally: # Fermeture de la session session.close()
Explication du code :
Session = sessionmaker(bind=engine)
: crée une fabrique de sessions liée à l'engine. On utiliseSession()
pour ouvrir une nouvelle session.- Le bloc
try
permet d'enchaîner plusieurs actions dans une même transaction. - Si une erreur se produit,
rollback()
annule les changements depuis le début de la transaction. commit()
confirme définitivement les changements en base.session.close()
libère les ressources de la session après utilisation.
Remarques
-
Transactions complexes : il est important de regrouper plusieurs opérations dans une même session lorsque celles-ci dépendent les unes des autres. Un rollback garantit l'intégrité des données si une étape échoue.
-
Best practice : toujours utiliser un
try...except...finally
pour :- Faire
commit()
en cas de succès. - Faire
rollback()
en cas d'erreur. - Fermer proprement la session.
- Faire
-
Session longue : si une session reste ouverte trop longtemps, cela peut poser des problèmes de verrouillage de la base de données et de consommation mémoire.
-
Expire on commit : par défaut, SQLAlchemy expurge les objets en mémoire après un
commit()
.