事务:提交与回滚

56.10 事务:提交与回滚

一组 SQL 要么全部成功,要么全部撤销,这叫事务(Transaction)。

conn.commit() 提交;conn.rollback() 撤销本次事务内的修改。

转账示例:A 减 100、B 加 100 必须同时成功,否则 rollback。

💡 with conn 正常结束会 commit,发生异常会 rollback。

转账演示(内存库)

import sqlite3

conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE account(id INTEGER PRIMARY KEY, name TEXT, balance REAL)')
conn.executemany('INSERT INTO account VALUES (?,?,?)', [(1,'A',1000),(2,'B',500)])

try:
    conn.execute('UPDATE account SET balance=balance-100 WHERE id=1')
    conn.execute('UPDATE account SET balance=balance+100 WHERE id=2')
    conn.commit()
    print('转账成功', conn.execute('SELECT * FROM account').fetchall())
except Exception as e:
    conn.rollback()
    print('失败已回滚', e)
finally:
    conn.close()