Django事务确保数据一致性

简介


当处理的数据表存在关联性,我们需要确保关联数据之间的逻辑关系是否正确和完整

最近笔者遇到的场景:

  1. B数据关联A,此时需要先创建A数据,再去创建B数据。
  2. 创建B数据的同时还要进行逻辑处理(判断B数据有没有重复)
  3. 如果B数据没有通过我们预设置的逻辑处理,A数据就要进行回滚
  4. B数据通过预设值的逻辑处理后,整个链路完整结束,数据是完整的

以上4个环节,如果3个环节出现问题,那么我们就要回滚事务,不然则会出现数据不完整(意思就是B数据没有创建出来,但是A数据创建出来了)

实现代码:

python 复制代码
from django.db import transaction
from rest_framework.response import Response

@transaction.atomic
def view_handle(request, *args, **kwargs):
	# 设置回滚点
    save_id = transaction.savepoint()

	A_data = 创建A数据

	B_data = 查询B数据是否存在
	
	# B数据已经存在,则进行回滚
	if B_data:
		# 回滚到指定地方
		transaction.savepoint_rollback(save_id)
		return Response({"code":0, 'msg':'数据已存在'})
	else
		创建B数据,关联A数据
		return Response({"code":1, "msg": "Success!"})

transaction.atomic可以确保数据的原子性,出现异常进行回滚,但是没办法处理关联性数据的一致性。

所以我们通过上面方式预设值回滚点,当出现逻辑不正确时,可以进行回滚,这样可以实现关联性数据的正确和完整性。

相关推荐
“AI国潮设计-小江”13 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
wenwen_chao13 小时前
Python学习与开发资源合集:实用技巧与工具推荐
python
for_ever_love__14 小时前
函数——参数、lambda、*args与作用域
python·函数·大模型开发·编程基础
东莞市云毅网络有限公司14 小时前
企业资料时效性判定:Last-Modified、正文日期与版本字段三路交叉
python·sqlite·自动化运维·geo·数据监测
Query*14 小时前
深入浅出LangGraph【一】_基础篇
python·ai·langchain
XiaoMaqqqq14 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
许彰午15 小时前
01-Oracle数据库简介与版本选择
数据库·oracle
菜鸟~noob23315 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
ShyanZh15 小时前
【Python3基础】19-Socket 与 TCP、UDP 编程
python·网络协议·tcp/ip·udp
惊讶的猫16 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python