Django模型设置unique=True时有没有简便方法忽略重复数据保存?
Django保存重复数据时跳过不报错的实现方法
方法1:使用get_or_create(推荐,全Django版本兼容)
这是最常用的方案,原子操作不会有并发问题,存在重复数据时直接返回已有对象,不会抛出异常:
# submission_id为判断重复的唯一字段,defaults里放其他字段的赋值 obj, created = Reddit_Submission.objects.get_or_create( submission_id="你的待存内容id", defaults={ "submission_time_stamp": "对应时间戳", "submission_title": "对应标题", "submission_score": "对应分数", "submission_author": "对应作者", "submission_url": "对应链接" } ) # 返回值说明: # created为True:数据不存在,本次完成新增 # created为False:数据已存在,本次跳过保存
方法2:使用save方法的ignore_conflicts参数(Django 4.2+支持)
如果你习惯直接调用实例的save方法,可以传入ignore_conflicts=True,遇到唯一约束冲突时会自动跳过保存,不会报错:
new_sub = Reddit_Submission( submission_id="你的待存内容id", submission_time_stamp="对应时间戳", submission_title="对应标题", submission_score="对应分数", submission_author="对应作者", submission_url="对应链接" ) # 冲突时直接忽略,无报错 new_sub.save(ignore_conflicts=True)
低版本Django兼容方案
如果你的Django版本低于4.2,可以手动捕获唯一约束异常实现跳过逻辑:
from django.db import IntegrityError new_sub = Reddit_Submission( # 字段赋值同上 ) try: new_sub.save() except IntegrityError: # 命中唯一约束重复,直接跳过即可 pass
内容的提问来源于stack exchange,提问作者Tobsterr
相关产品推荐
相关产品推荐

