zoukankan      html  css  js  c++  java
  • django中使用mysql数据库的事务

    django中怎么使用mysql数据库的事务

     

    Mysql数据库事务:

    在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起失败

    Django中对于数据库的事务,默认每执行一句数据库操作,便会自动提交。我们需要在保存数据库操作中自己控制数据库事务的执行流程。

    在Django中可以通过django.db.transaction模块提供的atomic来定义一个事务,atomic提供两种用法:

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

        

    • with语句用法 
      from django.db import transaction
      
      def viewfunc(request):
          # 这部分代码不在事务中,会被Django自动提交
          ...
      
          with transaction.atomic():
              # 这部分代码会在事务中执行
              ...
      

        

    在Django中,还提供了保存点的支持,可以在事务中创建保存点来记录数据的特定状态,数据库出现错误时,可以恢复到数据保存点的状态

    from django.db import transaction
    
    # 创建保存点
    save_id = transaction.savepoint()  
    
    # 回滚到保存点
    transaction.savepoint_rollback(save_id)
    

      

    补充:

    mysql事务:一组mysql语句,放在同一事务中,要么都成功,要么都失败。

    1)mysql事务基本操作:

    ​ begin或start transaction:手动开启一个mysql事务。

    ​ commit: 事务提交,让事务中sql语句的执行结果永久有效。

    ​ rollback: 事务回滚,撤销事务中sql语句的执行结果。

    2)mysql事务的保存点:

    ​ 在mysql事务中,可以设置事务保存点,在进行事务语句回滚时可以只回滚到某个保存点。

    ​ savepoint `保存点名称`: 设置mysql事务保存点。

    ​ rollback to `保存点名称`: 回滚事务语句到保存点的位置,保存点之后sql语句的执行结果会被撤销。

  • 相关阅读:
    阿波罗11号登月全套高清照片(16650张,67.1G)分享
    oracle ORA-02292: 违反完整约束条件
    三十六副寺庙对联,领略真正的大智慧!
    SpringCloud微服务架构及其示例
    IDEA怎么关闭暂时不用的工程
    关于解决Incorrect result size: expected 1, actual的问题
    Centos7安装redis6.0.6教程
    VMware安装CentOS7超详细版
    Spring5--@Indexed注解加快启动速度
    《程序员修炼手册》
  • 原文地址:https://www.cnblogs.com/yoyo1216/p/10190164.html
Copyright © 2011-2022 走看看