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

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

相关推荐
怣507 分钟前
MySQL子查询零基础入门教程:从小白到上手(零基础入门版)
数据库·mysql
铉铉这波能秀10 分钟前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
码界调试侠10 分钟前
MongoDB 常用查询语法
数据库·mongodb
静听山水12 分钟前
StarRocks导入数据【Stream Load】
数据库
藦卡机器人12 分钟前
国产机械臂做的比较好的品牌有哪些?
大数据·数据库·人工智能
怒放吧德德37 分钟前
Python3基础:基础实战巩固,从“会用”到“活用”
后端·python
jiunian_cn39 分钟前
【Redis】数据库管理操作
数据库·redis·缓存
aiguangyuan44 分钟前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
喵手44 分钟前
Python爬虫实战:知识挖掘机 - 知乎问答与专栏文章的深度分页采集系统(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集知乎问答与专栏文章·采集知乎数据·采集知乎数据存储sqlite
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple