Transaktionen und Context Manager
Sicher committen und zurückrollen
Transaktionen und Context Manager ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist eine Transaktion?
Eine Transaktion fasst mehrere Anweisungen zusammen, sodass sie entweder alle erfolgreich sind oder gemeinsam fehlschlagen. Dadurch bleiben Ihre Daten konsistent.
SQLite startet automatisch eine Transaktion, bevor datenändernde Anweisungen ausgeführt werden.
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()Mit Commit speichern
Änderungen sind erst dauerhaft, wenn Sie conn.commit() aufrufen. Bis dahin existieren sie nur in der aktuellen Transaktion.
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()Ein Rollback durchführen
conn.rollback() macht alle Änderungen seit dem letzten Commit rückgängig. Verwenden Sie es, wenn etwas schiefgeht.
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()Eine Geldüberweisung
Transaktionen sind besonders wichtig, wenn mehrere Aktualisierungen synchron bleiben müssen. Bei einer Banküberweisung wird ein Konto belastet und einem anderen Konto Geld gutgeschrieben. Beides muss geschehen, oder nichts davon darf geschehen.
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()Fehler mit try/except behandeln
Schließen Sie eine Transaktion in try/except ein. Bei einem Fehler führen Sie ein Rollback durch, damit teilweise vorgenommene Änderungen Ihre Daten nicht beschädigen.
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()Die Verbindung als Context Manager
Bei der Verwendung von with conn: wird bei Erfolg automatisch ein Commit durchgeführt und bei einer Ausnahme innerhalb des Blocks ein Rollback.
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()Automatisches Rollback bei einer Ausnahme
Wenn im Block with conn: eine Ausnahme auftritt, wird die Transaktion automatisch zurückgesetzt. Beachten Sie, dass die Verbindung selbst geöffnet bleibt.
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() für die Verbindung
Der Helfer contextlib.closing stellt sicher, dass beim Ende des Blocks close() aufgerufen wird und die Verbindung freigegeben wird.
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')Beide Muster kombinieren
Verschachteln Sie with conn: innerhalb von closing(...), um sowohl die Transaktion zu verwalten als auch das Schließen der Verbindung sicherzustellen.
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 der Verbindung steuert, wann Transaktionen beginnen. In der Standardeinstellung übernimmt SQLite die Verwaltung; wenn Sie den Wert auf None setzen, wird der Autocommit-Modus aktiviert.
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()Warum Transaktionen wichtig sind
Ohne Transaktionen könnte ein Absturz während einer Aktualisierung halb fertige Daten hinterlassen. Transaktionen machen eine Gruppe von Änderungen atomar, also unteilbar. Das schützt die Datenintegrität.
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()Kurze Überprüfung
Testen Sie Ihr Wissen über Transaktionen.
Zusammenfassung
Sie haben gelernt, Transaktionen sicher zu verwalten.
commit()speichert Änderungen;rollback()macht sie rückgängig- Schließen Sie riskante Schreibvorgänge in
try/exceptein und führen Sie ein Rollback durch with conn:führt automatisch ein Commit oder Rollback durchcontextlib.closingstellt sicher, dass die Verbindung geschlossen wird
Häufig gestellte Fragen
Ist die Lektion „Transaktionen und Context Manager“ kostenlos?
Ja — der vollständige Text von „Transaktionen und Context Manager“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Transaktionen und Context Manager“?
Sicher committen und zurückrollen Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Python Academy zu starten?
Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Transaktionen und Context Manager“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?
Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Verbindungen herstellen und Tabellen erstellen
- Insert, Select, Update, Delete
- Parametrisierte Abfragen
- Transaktionen und Context Manager