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

事务

在完成一个整体功能时,操作到了多个表数据,或者同一个表的多条记录,如果要保证这些sql语句操作作为一个整体保存到数据库中,那么可以使用事务(transation)
事务具有4个特征,5个隔离等级
四个特性:一致性,原子性,隔离性,持久性
# 隔离性: 两个事务的隔离性,隔离性的修改可以通过数据库的配置文件进行修改
五个隔离级别: 串行隔离,可重复读,已提交读,未提交读,没有隔离级别
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)[事务隔离级别->幻读,脏读]
持久性(Durability)
在mysql中有专门的SQl语句来完成事务的操作,事务操作一般有3个步骤:
设置事务开始 start transation; \begin;
事务的处理[增删改]
设置事务的回滚或者提交 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) #回滚到标记点

django中如何处理事务的更多相关文章

  1. django中使用事务以及接入支付宝支付功能

    之前一直想记录一下在项目中使用到的事务以及支付宝支付功能,自己一直犯懒没有完,趁今天有点兴致,在这记录一下. 商城项目必备的就是支付订单的功能,所以就会涉及到订单的保存以及支付接口的引入.先来看看订单 ...

  2. DJango中开启事务的两种方式

    目录 Django中开启事务的两种方式 第一种 第二种 Django中开启事务的两种方式 第一种 from django.db import transaction with transaction. ...

  3. 事务的隔离级别,mysql中开启事务、django中开启事务

    目录 一.事务的特性 二.数据库中开启事务 三.Django中开启事务的两种方式 第一种 第二种 四.事务的隔离级别 隔离级别 如何查看mysql隔离级别? 修改事务的隔离级别 隔离级别解释 read ...

  4. django中的事务管理

    在讲解之前首先来了解一下数据库中的事务. 什么是数据库中的事务? 热心网友回答: ():事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不 ...

  5. Django中关于事务的代码编写

    Django中对于数据库的事务,默认每执行一句数据库操作,便会自动提交. 在Django中可以通过django.db.transaction模块提供的atomic来定义一个事务,atomic提供两种用 ...

  6. Django中的事务(Transaction)管理

    Django默认的事务行为 默认情况下,在Django中事务是自动提交的.当我们运行Django内置的模板修改函数时,例如调用model.save()或model.delete()时,事务将被立即提交 ...

  7. Django中MySQL事务的使用

    Django中事物的使用 from django.db import transaction @transaction.atomic通过transaction的@transaction.atomic装 ...

  8. Django中的事务与ajax

    一 事务与锁 1.行级锁 行级锁是由存储引擎实现的.如mysql里默认指定的InnoDB存储引擎,由它实现行级锁.InnoDB的行级锁定同样分为两种类型,共享锁(X)和排他锁(S). 对于UPDATE ...

  9. 数据库事务及其EF中如何处理事务

    一.基础知识 1)         使用事务级别ReadUnCommited 会产生脏读现像,意味着读取到的为UnCommited(未提交)的数据.怎么理解呢?在使用该隔离级别的事务开始后.更新了数据 ...

  10. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

随机推荐

  1. [转帖]一起来体验96核心、192线程CPU——第四代AMD EPYC处理器独家测试

    http://k.sina.com.cn/article_1882475282_70344b12027010s1x.html 与第三代EPYC 7003系列处理器相比,新一代EPYC 9004系列处理 ...

  2. ChaosMesh 半离线安装过程

    说明 所谓半离线值得是公司拉不下镜像来 !-_-! 都是学习的官网资料https://chaos-mesh.org/docs 镜像获取 其实镜像获取很容易. 找一个能上外网的VPC就可以了. mkdi ...

  3. 容器方式运行Mysql8.0.26的方法

    容器化运行Mysql8.0.26测试环境的方法 1. 前言 之前为了好处理,都是二进制包的方式安装mysql,但是有时候需要下载和安装也比较费时费力, 今天中午在弄Oracle RAC时想着以后能够容 ...

  4. 谈JVM xmx, xms等内存相关参数合理性设置

    作者:京东零售 刘乐 说到JVM垃圾回收算法的两个优化标的:吞吐量和停顿时长,并提到这两个优化目标是有冲突的.那么有没有可能提高吞吐量而不影响停顿时长,甚至缩短停顿时长呢?答案是有可能的,提高内存占用 ...

  5. go多版本管理

    在日常开发工作过程中,很多时候我们都需要在自己的机器上安装多个go版本,像是go1.16引入的embed,go1.18引入了泛型:又或是自己本地使用的是最新版,但公司的项目中使用的go1.14.go1 ...

  6. C++ Qt开发:数据库与TableView多组件联动

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableVi ...

  7. nodejs连接mysql报错:throw err; // Rethrow non-MySQL errors TypeError: Cannot read property 'query' of undefined

    该问题的解决方案如下: win+R 输入cmd mysql -u root -p 输入密码进入到mysql 3.执行sql语句,将密码改成123456(自己可以记住的密码即可) alter user ...

  8. 699元 光威推出神武RGB系列DDR5 6400内存:海力士精选颗粒

    光威推出了神武RGB系列DDR5 6400台式机内存条,售价为699元. 据了解,新款内存条采用了海力士M-die特挑颗粒,拥有CL-32-39-39-102低时序. 散热方面,这款内存条采用显卡级散 ...

  9. 性价比超频我都要 两大内存绝技带来20%性能提升!技嘉雪雕Z790 AORUS LITE AX-W主板评测

    一.前言:主打性价比.两大内存绝技加持的技嘉Z790主板 要说现在最主流的装机方案,那必然是13代酷睿+700系主板.我们此前曾测试过技嘉的Z790钛雕主板,独有的顶级表现让人印象深刻,不过近6K的价 ...

  10. 主机--Host

    概念:主机是用于构建应用程序和服务.封装应用资源的对象,负责程序的启动和生命周期的管理,简单来说主机即应用程序. 主机运行:当主机运行的时候,他会将托管在服务容器集合里面注册的IHostService ...