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

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

相关推荐
zhiSiBuYu05175 分钟前
RAG 性能优化与缓存策略实战指南
人工智能·python·机器学习
l1t7 分钟前
DeepSeek总结的RegreSQL 2.0测试通过了。计划却没通过。
linux·数据库·postgresql
荣码14 分钟前
Prompt工程实战:同一个需求换3种写法,效果差10倍
java·python
想会飞的蒲公英16 分钟前
集成学习入门:Bagging、Boosting 到底在组合什么
人工智能·python·机器学习·集成学习·boosting
努力努力再努力搬砖17 分钟前
批量下载ERA5数据
python
_老码19 分钟前
AI-reader阅读助手开发过程
人工智能·python·ai
_Jimmy_24 分钟前
python性能分析工具
python
Dawn-bit28 分钟前
Linux打包压缩与用户权限管理详解
linux·服务器·数据库
ls_elect29 分钟前
PostgreSQL 18.4 SCRAM-SHA-256 认证故障诊断及修复办法
linux·数据库·postgresql
熊文豪32 分钟前
给国产数据库装上中文搜索引擎:zhparser vs jieba 分词实战,与三个隐藏关卡
数据库·搜索引擎·电科金仓