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

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

相关推荐
helloweilei9 小时前
python 抽象基类
python
用户8356290780519 小时前
Python 实现 PPT 转 HTML
后端·python
IvorySQL10 小时前
PostgreSQL 技术日报 (3月6日)|为什么 Ctrl-C 在 psql 里让人不安?
数据库·postgresql·开源
NineData11 小时前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
zone773915 小时前
004:RAG 入门-LangChain读取PDF
后端·python·面试
zone773915 小时前
005:RAG 入门-LangChain读取表格数据
后端·python·agent
IvorySQL16 小时前
PostgreSQL 技术日报 (3月5日)|规划器控制力升级,内核能力再进阶
数据库·postgresql·开源
树獭非懒1 天前
AI大模型小白手册|Embedding 与向量数据库
后端·python·llm
数据组小组1 天前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替