事务:提交与回滚
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()