zoukankan      html  css  js  c++  java
  • django中如何处理事务

    生成订单时,一次性生成多条数据记录或者一次性操作多个模型,都有可能产生中途报错的情况,所以需要在生成订单时保证多个数据操作的原子性。

    事务

    在完成一个整体功能时,操作到了多个表数据,或者同一个表的多条记录,如果要保证这些sql语句操作作为一个整体保存到数据库中,那么可以使用事务(transation)
    事务具有4个特征,5个隔离等级
    四个特性:一致性,原子性,隔离性,持久性
    # 隔离性: 两个事务的隔离性,隔离性的修改可以通过数据库的配置文件进行修改
    五个隔离级别: 串行隔离,可重复读,已提交读,未提交读,没有隔离级别
        原子性(Atomicity)
        一致性(Consistency)
        隔离性(Isolation)[事务隔离级别->幻读,脏读]
        持久性(Durability)
    在mysql中有专门的SQl语句来完成事务的操作,事务操作一般有3个步骤:
    		设置事务开始  start transation; egin;
    		事务的处理[增删改]
    		设置事务的回滚或者提交 rollback / commit
     mysql 存储过程 异常捕获来完成自动回滚
    在 django等web框架中,只要ORM模型,一般都会实现了事务操作封装
    所以在django中我们可以直接使用ORM模型提供的事务操作方法即可完成事务的操作
    

    django框架中操作事务的方法

    方法一

    from django.db import transaction  # 先导入处理事务的transaction模块
    from rest_framework.views import APIView
    class OrderAPIView(APIView):
          @transaction.atomic   #开启事务,当方法执行完成以后,自动提交事务
          def post(self,request):
                ...
    

    方法二

    from django.db import transaction
    from rest_framework.views import APIView
    class OrderAPIView(APIView):
          def post(self, request):
                ...
                with transaction.atomic() # 开始事务,当with语句执行完成以后,自动提交事务
                      # 数据库操作
                      ....
    

    在使用事务过程中,有时候会出现异常,当出现异常的时候,我们需要让程序停止下来,同时需要回滚事务

    from django.db import transaction
    from rest_framework.views import APIView
    class OrderAPIView(APIView):
          def post(self, request):
                ...
                with transaction.atomic():
                      # 设置事务回滚的标记点
                      sid = transaction.savepoint()
                      ...
                      try:
                            ...
                      except:
                            transaction.savepoint_rollback(sid) #回滚到标记点
    

    -------------------------------------------

    个性签名:代码过万,键盘敲烂!!!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    Attributes in C#
    asp.net C# 时间格式大全
    UVA 10518 How Many Calls?
    UVA 10303 How Many Trees?
    UVA 991 Safe Salutations
    UVA 10862 Connect the Cable Wires
    UVA 10417 Gift Exchanging
    UVA 10229 Modular Fibonacci
    UVA 10079 Pizza Cutting
    UVA 10334 Ray Through Glasses
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/13735112.html
Copyright © 2011-2022 走看看