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可以确保数据的原子性,出现异常进行回滚,但是没办法处理关联性数据的一致性。

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

相关推荐
qwerasda1238528 分钟前
基于Faster-RCNN_R50_Caffe_FPN_1x_COCO的绿豆计数与识别系统深度学习Python代码实现
python·深度学习·caffe
云边有个稻草人10 分钟前
KingbaseES 数据库赋能:时序数据库国产化替代的硬实力范本
数据库·时序数据库·国产数据库·金仓·kingbasees sql
今晚务必早点睡7 小时前
微服务改数据库密码后服务仍能访问?一次“看似异常、实则常见”的生产现象全解析
数据库·微服务·oracle
程序员:钧念7 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
数据与后端架构提升之路8 小时前
TeleTron 源码揭秘:如何用适配器模式“无缝魔改” Megatron-Core?
人工智能·python·适配器模式
老师我太想进步了20269 小时前
cmd连接MySQL及相关查询
数据库·mysql
hele_two9 小时前
快速幂算法
c++·python·算法
l1t9 小时前
利用DeepSeek将python DLX求解数独程序格式化并改成3.x版本
开发语言·python·算法·数独
Cemtery11611 小时前
Day26 常见的降维算法
人工智能·python·算法·机器学习
難釋懷11 小时前
Redis命令-Set命令
数据库·redis·缓存