Django中事务atomic的使用

易小灯塔
2018-02-14 / 0 评论 / 929 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年06月27日,已超过882天没有更新,若内容或图片失效,请留言反馈。

在 Django 中可以通过django.db.transaction 模块提供的atomic来定义一个事务
atomic提供两种方案实现事务

首先是导包

from from django.db import transaction

调用 atomic 函数
事务函数 atomic 有两种用法:装饰器和 with 用法。

装饰器用法

被atomic装饰的函数将直接作为一个事务执行。
@transaction.atomic
def modify_database():
  """
  所有修改数据库的操作作为一个事务,要么都做,要么都不做
  """
  pass

with 用法

包含在with语句内部的所有数据库修改操作将作为一个事务一起执行。
with transaction.atomic():
  """
  with 内部所有修改数据库的操作作为一个事务,要么都做,要么都不做
  """
  pass

提交与回滚

  • 保存点
事务保存节点,在事务开始时设置。或设置在一些多分支的节点上。
# 创建保存点
save_id = transaction.savepoint()
  • 提交
结束并提交事务。一个事务结束后不要忘了提交到数据库。
# 提交从保存点到当前状态的所有数据库事务操作
transaction.savepoint_commit(save_id)
  • 回滚
当出现数据库错误,或需取消某一段的事务时,可以回滚到事务的前一保存节点处。
# 回滚到保存点
transaction.savepoint_rollback(save_id)
0

评论 (0)

取消