隐藏页面特效

django中如何处理事务

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

1|0事务


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

2|0django框架中操作事务的方法


方法一

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) #回滚到标记点

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/13735112.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(777)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示