31、django的事务_transaction

2020-08-20  本文已影响0人  猪儿打滚

背景

在写项目时,特别是view中,我们可能需要进行多个业务操作(不仅仅是操作sql)。比如说:在编辑case的接口,我需要对case对应的interface进行新增/修改/删除操作,以及对case进行更新操作;我需要这样实现:把这四个步骤当成个事务,当其中有一个步骤失败,则回滚不执行;只有都成功时,才执行这四个步骤。

django事务类库:django.db.transaction

atomic提供两种方案实现事务

from django.db import transaction

@transaction.atomic
def viewfunc(request):
  # 这些代码会在一个事务中执行
  ......

装饰器用法:整个视图中所有 MySQL 数据库的操作都看做一个事务,范围太大,不够灵活。而且无法直接作用于类视图

from django.db import transaction

def viewfunc(request):
  # 这部分代码不在事务中,会被 Django 自动提交
  ......

  with transaction.atomic():
      # 这部分代码会在事务中执行
      ......

with 语句用法:可以灵活的有选择性的把某些 MySQL 数据库的操作看做一个事务。而且不用关心视图的类型。

transaction三个语句的使用

from django.db import transaction
  with transaction.atomic():
        # 这部分代码会在事务中执行
        # 创建保存点
        save_id = transaction.savepoint()
        try:
            ....
        except:
             # 回滚到保存点
             transaction.savepoint_rollback(save_id)
        # 提交从保存点到当前状态的所有数据库事务操作
        transaction.savepoint_commit(save_id)
上一篇下一篇

猜你喜欢

热点阅读