Django事务

事务(transaction)

1、导包。

事务属于数据库的范畴,故导包路径如下:

from from django.db import transaction

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

  • 装饰器用法

被atomic装饰的函数将直接作为一个事务执行。

@transaction.atomic
def modify_database():
  """
  所有修改数据库的操作作为一个事务,要么都做,要么都不做
  """
  pass
  • with 用法

包含在with语句内部的所有数据库修改操作将作为一个事务一起执行。

with transaction.atomic():
  """
  with 内部所有修改数据库的操作作为一个事务,要么都做,要么都不做
  """
  pass

3、提交与回滚

  • 保存点

事务保存节点,在事务开始时设置。或设置在一些多分支的节点上。

# 创建保存点
save_id = transaction.savepoint()
  • 提交

结束并提交事务。一个事务结束后不要忘了提交到数据库。

# 提交从保存点到当前状态的所有数据库事务操作
transaction.savepoint_commit(save_id)
  • 回滚

当出现数据库错误,或需取消某一段的事务时,可以回滚到事务的前一保存节点处。

# 回滚到保存点
transaction.savepoint_rollback(save_id)
posted @ 2021-08-10 16:29  流水自净  阅读(219)  评论(0编辑  收藏  举报