3、使用事物控制数据库操作
1)事务
说明:
-
事务是由一步或几步数据库操作序列组成的逻辑执行单元
-
事务的 4 个特性:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持续性(Durability)
这 4 个特性简称为 ACID 性。
2)提交事务
说明:
-
使用数据库连接的 commit() 方法提交事务
-
若游标只是执行 DDL 语句,程序不需要显示提交事务,程序所做的修改会自动生效;
-
若游标执行 DML 语句,不提交事务则数据修改失效(默认回滚,且在 DML 语句之后的DDL语句也不会生效),因此需要显示提交事务
-
未提交事务(数据修改未生效)示例:
conn = sqlite3.connect('test.db') c = conn.cursor() # 执行 DML 语句 c.execute('insert into user_tb values(null, ?, ?, ?)', ('猪八戒', '234567', 21)) # 执行 DDL 语句 c.execute('create table monster_tb(_id integer primary key)') c.close() conn.close()
-
提交事务(数据修改生效)示例:
conn = sqlite3.connect('test.db') c = conn.cursor() # 执行 DML 语句 c.execute('insert into user_tb values(null, ?, ?, ?)', ('猪八戒', '234567', 21)) # 执行 DDL 语句 c.execute('create table monster_tb(_id integer primary key)') conn.commit() # 提交事务 c.close() conn.close()
-
2)回滚事务
说明:事务回滚的两种方式
- 显示回滚:调用数据库连接对象的 rollback() 方法
- 自动回滚:系统错误或者强行退出(退出之前,没有提交)
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute('insert into user_tb values(null, ?, ?, ?)', ('沙僧', '345678', 22))
c.execute('create table immortal(_id integer primary key)')
conn.rollback() # 显示回滚事务(若程序不提交事务,默认回滚)
c.close()
conn.close()