0Pricing
Python Academy · Leçon

Transactions et gestionnaires de contexte

Valider et annuler les transactions en toute sécurité

Transactions et gestionnaires de contexte est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.

Qu'est-ce qu'une transaction ?

Une transaction regroupe plusieurs instructions afin qu'elles réussissent ou échouent toutes ensemble. Cela préserve la cohérence de vos données.

SQLite démarre automatiquement une transaction avant les instructions qui modifient les données.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
print('Table ready for transactions')
conn.close()

Valider pour enregistrer

Les modifications ne sont pas permanentes tant que vous n'avez pas appelé conn.commit(). Jusque-là, elles existent uniquement dans la transaction actuelle.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
cur.execute('INSERT INTO accounts (balance) VALUES (100)')
conn.commit()
print('Committed')
conn.close()

Annuler les modifications

conn.rollback() annule toutes les modifications effectuées depuis la dernière validation. Utilisez-le lorsqu'un problème survient.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
conn.commit()
cur.execute('INSERT INTO accounts (balance) VALUES (100)')
conn.rollback()
cur.execute('SELECT COUNT(*) FROM accounts')
print('Rows after rollback:', cur.fetchone()[0])
conn.close()

Un transfert d'argent

Les transactions sont particulièrement utiles lorsque plusieurs mises à jour doivent rester synchronisées. Un virement bancaire soustrait une somme d'un compte et l'ajoute à un autre. Les deux opérations doivent avoir lieu, ou aucune des deux.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 100)')
cur.execute('INSERT INTO accounts (id, balance) VALUES (2, 50)')
cur.execute('UPDATE accounts SET balance = balance - 30 WHERE id = 1')
cur.execute('UPDATE accounts SET balance = balance + 30 WHERE id = 2')
conn.commit()
cur.execute('SELECT id, balance FROM accounts')
print(cur.fetchall())
conn.close()

Gérer les erreurs avec try/except

Entourez une transaction d'un bloc try/except. En cas d'erreur, annulez les modifications afin que des changements partiels ne corrompent pas vos données.

import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
try:
    cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 100)')
    cur.execute('INSERT INTO accounts (id, balance) VALUES (1, 200)')
    conn.commit()
except sqlite3.IntegrityError:
    conn.rollback()
    print('Rolled back after error')
conn.close()

Connexion en tant que gestionnaire de contexte

Utiliser with conn: valide automatiquement la transaction en cas de succès et l'annule si une exception se produit dans le bloc.

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)')
with conn:
    conn.execute('INSERT INTO accounts (balance) VALUES (100)')
print('Auto-committed via with block')
conn.close()

Annulation automatique en cas d'exception

Si le bloc with conn: déclenche une exception, la transaction est automatiquement annulée. Notez que la connexion elle-même reste ouverte.

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE accounts (id INTEGER PRIMARY KEY)')
try:
    with conn:
        conn.execute('INSERT INTO accounts (id) VALUES (1)')
        conn.execute('INSERT INTO accounts (id) VALUES (1)')
except sqlite3.IntegrityError:
    print('Block rolled back automatically')
count = conn.execute('SELECT COUNT(*) FROM accounts').fetchone()[0]
print('Rows:', count)
conn.close()

closing() pour la connexion

L'outil contextlib.closing garantit que close() est appelé à la fin du bloc, ce qui libère la connexion.

import sqlite3
from contextlib import closing
with closing(sqlite3.connect(':memory:')) as conn:
    conn.execute('CREATE TABLE t (id INTEGER)')
    print('Used inside closing()')
print('Connection closed automatically')

Combiner les deux approches

Imbriquez with conn: dans closing(...) pour gérer à la fois la transaction et la fermeture de la connexion.

import sqlite3
from contextlib import closing
with closing(sqlite3.connect(':memory:')) as conn:
    conn.execute('CREATE TABLE t (id INTEGER, v TEXT)')
    with conn:
        conn.execute('INSERT INTO t VALUES (1, ?)', ('hello',))
    print(conn.execute('SELECT * FROM t').fetchall())

isolation_level

isolation_level de la connexion contrôle le moment où les transactions commencent. La valeur par défaut laisse SQLite les gérer ; la définir sur None active le mode de validation automatique.

import sqlite3
conn = sqlite3.connect(':memory:')
print('Default isolation_level:', repr(conn.isolation_level))
conn.isolation_level = None
print('Now autocommit:', conn.isolation_level)
conn.close()

Pourquoi les transactions sont importantes

Sans transactions, une panne au milieu d'une mise à jour pourrait laisser des données à moitié modifiées. Les transactions rendent un ensemble de modifications atomique : indivisible. Cela protège l'intégrité des données.

import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE log (msg TEXT)')
with conn:
    conn.execute('INSERT INTO log VALUES (?)', ('all or nothing',))
print('Atomic write done')
conn.close()

Vérification rapide

Vérifiez vos connaissances sur les transactions.

Récapitulatif

Vous avez appris à gérer les transactions en toute sécurité.

  • commit() enregistre les modifications ; rollback() les annule
  • Entourez les écritures risquées d'un bloc try/except avec annulation
  • with conn: valide ou annule automatiquement la transaction
  • contextlib.closing garantit la fermeture de la connexion

Questions Fréquemment Posées

La leçon « Transactions et gestionnaires de contexte » est-elle gratuite ?

Oui — le texte complet de « Transactions et gestionnaires de contexte » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Transactions et gestionnaires de contexte » ?

Valider et annuler les transactions en toute sécurité Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Python Academy ?

Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Transactions et gestionnaires de contexte » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?

Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Connexion et création de tables
  2. Insert, Select, Update, Delete
  3. Requêtes paramétrées
  4. Transactions et gestionnaires de contexte
← Retour à Python Academy