美文网首页
31、django的事务_transaction

31、django的事务_transaction

作者: 猪儿打滚 | 来源:发表于2020-08-20 15:54 被阅读0次

    背景

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

    django事务类库:django.db.transaction

    atomic提供两种方案实现事务

    • 1、装饰器用法:
    from django.db import transaction
    
    @transaction.atomic
    def viewfunc(request):
      # 这些代码会在一个事务中执行
      ......
    

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

    • 2、with 语句用法:
    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)
    

    相关文章

      网友评论

          本文标题:31、django的事务_transaction

          本文链接:https://www.haomeiwen.com/subject/oxtejktx.html