jack_dzq

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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)  # 如果没有异常,成功提交事务
posted on 2020-06-12 09:46  jack_dzq  阅读(190)  评论(0)    收藏  举报