zoukankan      html  css  js  c++  java
  • Django提供的mysql事务

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

    django框架本身就提供了2种事务操作的用法。

    django的事务操作方法主要通过 django.db.transation模块完成的。

    启用事务用法1:

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

    启用事务用法2:

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

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

    from django.db import transaction
    from rest_framework.views import APIView
    class OrderAPIView(APIView):
        def post(self,request):
            ....
            with transation.atomic():
                # 设置事务回滚的标记点
                sid = transation.savepoint()
    
                ....
    
                try:
                    ....
                except:
                    transation.savepoint_rollback(sid)
    
  • 相关阅读:
    集合类小结
    Java相关文章
    centos下同时启动多个tomcat
    express发送get或post请求
    node.js的querystring模块
    node.js的url解析和生成
    node.js判断是否文件夹和文件
    node.js删除文件
    node.js对文件夹增删改查的操作
    node运行js文件热更新
  • 原文地址:https://www.cnblogs.com/remixnameless/p/13081670.html
Copyright © 2011-2022 走看看