Что происходит, если операция внутри транзакции завершается с ошибкой
При ошибке внутри транзакции происходит откат (rollback) всех изменений, сделанных в рамках этой транзакции, до состояния на момент начала транзакции. Это обеспечивает атомарность - либо выполняются все операции транзакции, либо ни одна.
Пример с SQLite:
import sqlite3
conn = sqlite3.connect(':memory:')
cursor = conn.cursor()
cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)")
try:
conn.execute("BEGIN TRANSACTION")
cursor.execute("INSERT INTO test VALUES (1, 'success')")
cursor.execute("INSERT INTO test VALUES (1, 'duplicate')") # Ошибка дубликата PK
conn.commit()
except sqlite3.IntegrityError:
conn.rollback()
print("Transaction rolled back")
Проверяем, что таблица пуста
print(cursor.execute("SELECT * FROM test").fetchall()) # []
Даже если первая вставка прошла успешно, из-за ошибки во второй операции вся транзакция откатится.
офферы быстрее!
Следующий вопрос
Это единственный вопрос по вашему фильтру