栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django中使用事务

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django中使用事务

导入
from dajngo.db import transaction
使用 装饰器用法:
from django.db import transaction

@transaction.atomic
def viewfunc(request):
  # 这些代码会在一个事务中执行
  ......
with上下文管理:
from django.db import transaction

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

  with transaction.atomic():
      # 这部分代码会在事务中执行
      ......
举例
# 创建保存点
save_id = transaction.savepoint()

# 回滚到保存点
transaction.savepoint_rollback(save_id)

# 提交从保存点到当前状态的所有数据库事务操作
transaction.savepoint_commit(save_id)
class OrderCommitView(LoginRequiredJSONMixin, View):
    """订单提交"""

    def post(self, request):
        """保存订单信息和订单商品信息"""
        # 显式的开启一个事务
        with transaction.atomic():
            # 创建事务保存点
            save_id = transaction.savepoint()

            # 暴力回滚
            try:
                # 保存订单基本信息 OrderInfo(一)
                order = OrderInfo.objects.create(
                    ...
                )

                # 从redis读取购物车中被勾选的商品信息
                ...
                # 遍历购物车中被勾选的商品信息
                for ...
                    if ...:
                        # 出错就回滚
                        transaction.savepoint_rollback(save_id)
                        return ...
            except Exception as e:
            	# 出错后记日志+回滚
                logger.error(e)
                transaction.savepoint_rollback(save_id)
                return ...

            # 提交订单成功,显式的提交一次事务
            transaction.savepoint_commit(save_id)
        # 响应提交订单结果
        return ...
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/589216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号