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语句的执行结果会被撤销。

django中使用mysql数据库的事务的更多相关文章

  1. Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...

  2. django 中连接mysql数据库的操作步骤

    django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys ...

  3. Django中使用MySQL数据库的连接配置

    1. 安装pymysql pip install pymysql 2. 导入 # 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置 import pymysql ...

  4. 如何在Django中配置MySQL数据库

    直接上图 在项目中直接找到settings 文件 第一步       原始Django自带数据库 第二步将配置改成MySQL的数据 第三步  在__init__文件中告知Django使用MySQL数据 ...

  5. 如何在python3环境下的Django中使用MySQL数据库

    我们在使用Django过程中,连接MySQL数据库时,对Python不同的版本对应的库也不一样,用惯了Python2的人在使用Python3时经常会遇到下面的错误: Error loading MyS ...

  6. Django 中配置MySQL数据库

    在Django的项目中会默认使用sqlite的数据库 配置MySQL需要在setting.py 里加入以下设置: 配置数据库 DATABASES = { 'default': { 'ENGINE': ...

  7. 在Django中连接MySQL数据库(Python3)

    我的环境:      python3.6,      Django2.1.5,      MySQL8.0.15,      win10,      PyCharm, 要求:已经安装了MySQL数据库 ...

  8. django中 对Mysql数据库的建表

    Django操作Mysql数据库: 1.1 在settings中,配置数据库相关参数,所以无需修改,这里我们看一下: DATABASES = { 'default': { # 这里可以指定使用的数据库 ...

  9. django中使用mysql数据库

    django连接mysql 安装MySQL 1 linux: apt install mysql-server apt install mysql-client mysql_secure_instal ...

随机推荐

  1. Elasticsearch 2.4 安装

    Ubuntu 18.04.1 Part I. Elasticsearch 1. install JDK Note: >1.8 reference: <Linux下安装Tomcat> ...

  2. 发送短信验证码倒计时,CountDownTimer;

    1.声明CountDownTimer的成员变量: private CountDownTimer countDownTimer; 2.设置倒计时总时间和间隔时间: countDownTimer = ne ...

  3. CentOS、Ubuntu、Debian简析

    Centos .Ubuntu.Debian 三个Linux都是非常优秀的系统,开源的系统,也分付费的商业版和免费版,下面简单比较这三种系统. Centos系统 非常多的商业公司部署在生产环境上的服务器 ...

  4. fatal error C1083: Cannot open include file: 'openssl/opensslv.h'

    在安装针对ELK系统的警告工具elastalert时,报错: fatal error C1083: Cannot open include file: 'openssl/opensslv.h',如下图 ...

  5. Mac下RabbitMQ安装和在Java client端的使用

    安装: 1.使用homebrew下载rabbitMQ: brew install rabbitmq 执行结果如下: Updating Homebrew... ==> Auto-updated H ...

  6. asp.net 中日期的格式化显示的方法

    在Asp.net 中经常使用日期,在不同的场合,对日期的显示方式有不同的要求,为此,自己总结了一些日期格式化的方式,仅供学习参考使用: C#格式化日期时间 DateTime dt = DateTime ...

  7. Heap Dump (heap=dump)

    Heap Dump (heap=dump) 转储堆内容使用heap=dump选项.可以是ASCII或者是二进制格式,根据设定的格式,jhat解析二进制格式.format=b. 如果指定格式是二进制,转 ...

  8. spring boot 整合redis --sea 方式1

    application.properties # REDIS (RedisProperties) # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服 ...

  9. leetcode1004

    class Solution: def getMax(self,B:'List[int]'): n = len(B) maxlen = 0 curlen = 0 for i in range (n): ...

  10. <基础> PHP 运算符 流程控制

    PHP运算符优先级: 递增/递减 (++ / --) > 算术运算符(+ .- .* ./) > 大小比较 > 逻辑与 (&)> 逻辑或(||) > 三目 > ...