Eine Transaktion fasst mehrere Befehle zusammen: Entweder gelten alle oder keiner.
python
with psycopg.connect(conninfo) as conn:
conn.execute('UPDATE konten SET stand = stand - 50 WHERE id = %s', (1,))
conn.execute('UPDATE konten SET stand = stand + 50 WHERE id = %s', (2,))
# Ende des with-Blocks ohne Fehler: automatisch commit
# Fehler irgendwo im Block: automatisch rollback, keiner der beiden Befehle gilt
| Mittel | Wirkung |
|---|---|
conn.commit() |
Änderungen bestätigen |
conn.rollback() |
Änderungen verwerfen |
with conn.transaction(): |
Eine untergeordnete Transaktion in einer Verbindung |
autocommit=True |
Jeder Befehl wird sofort bestätigt |
Ohne Commit sind Änderungen für andere Verbindungen nicht sichtbar, und beim Schließen ohne Commit gehen sie verloren. Das ist der häufigste Anfängerfehler ("mein INSERT ist nicht da").