Django transaction进行事务管理
概要
Transaction是django进行数据库原子性操作在python层面上的实现. 简单来说, 被transaction.atomic()包裹的代码块只在代码块顺利完成后进行数据库层面的commit.实际开发当中,遇到了一些问题.
-
导包transaction
-
设置该函数中的所有数据库操作在同一个事物中,第一个数据库操作1即使成功保存到数据库中,只要第2个数据操作失败,那么所有该段代码所有涉及的数据库操作都会更改回滚到原来。
with transaction.atomic()
-
设置事务保存点并开启事务
sid = transaction.savepoint() # 开启事务设置事务保存点
-
数据库读写操作
操作1
操作2
-
失败回滚事务(条件:任意一个操作失败,数据库操作发生异常,回滚到设置的事务保存点)
transaction.savepoint_rollback(sid)
raise serializers.ValidationError("数据保存失败") -
成功(条件:操作1和2都成功,提交事务)
transaction.savepoint_commit(sid) # 如果没有异常,成功提交事务
浙公网安备 33010602011771号