mysql - 每次项目运行时,django 都会出现重复错误
问题描述
我正在尝试将 response_body 中的一些数据添加到我的数据库“仪表板”中的“犯罪”表中
我只想添加此数据一次,因此第一次将数据成功添加到我的数据库中,但之后它给了我这个错误,因为它显然拒绝为另一个设置为唯一的 oid 创建重复条目
如何修改我的代码以便只添加一次数据并且不添加重复数据并且它不会给我这个错误django.db.utils.IntegrityError: (1062, "Duplicate entry '4767' for key 'PRIMARY'")
下面是我的代码。我已经从 models.py 创建了表并从 views.py 添加了数据,因为数据存在于 views.py 中,并且从这里添加数据更容易。
如果有任何其他合适的方法,请提出建议。
模型.py
from django.db import models
from django.contrib.auth.models import UserManager
from django.core.validators import int_list_validator
# Create your models here.
class Offenses(models.Model):
oid = models.IntegerField(primary_key=True)
description = models.CharField(null=False, max_length=20)
assigned_to = models.CharField(null=True, max_length=20)
categories = models.TextField(null=True)
category_count = models.IntegerField(null=True)
policy_category_count = models.IntegerField(null=True)
security_category_count = models.IntegerField(null=True)
close_time = models.TimeField(null=True)
closing_user = models.IntegerField(null=True)
closing_reason_id = models.IntegerField(null=True)
credibility = models.IntegerField(null=True)
relevance = models.IntegerField(null=True)
severity = models.IntegerField(null=True)
magnitude = models.IntegerField(null=True)
destination_networks = models.TextField(null=True)
source_network = models.CharField(null=True, max_length=20)
device_count = models.IntegerField(null=True)
event_count = models.IntegerField(null=True)
flow_count = models.IntegerField(null=True)
inactive = models.BooleanField(null=True)
last_updated_time = models.DateTimeField(null=True)
local_destination_count = models.IntegerField(null=True)
offense_source = models.IntegerField(null=True)
offense_type = models.IntegerField(null=True)
protected = models.BooleanField(null=True)
follow_up = models.BooleanField(null=True)
remote_destination_count = models.IntegerField(null=True)
source_count = models.IntegerField(null=True)
start_time = models.TimeField(null=True)
status = models.CharField(null=True, max_length=20)
username_count = models.IntegerField(null=True)
source_address_ids = models.TextField(null=True)
local_destination_address_ids = models.TextField(null=True)
domain_id = models.IntegerField(null=True)
objects = UserManager()
class Meta:
db_table = "offenses"
视图.py
response_body = json.loads(response.read().decode('utf-8'))
for j in response_body:
obj = Offenses.objects.create(oid=j['id'], description=j['description'])
解决方案
使用 Django 的get_or_create:
obj, created = Offenses.objects.get_or_create(oid=j['id'], defaults={'description': j['description']})
推荐阅读
- javascript - 为什么即使我已登录,我也无法访问仪表板路线?
- python - 如何调试从 Visual Studio Code 中的 Powershell 脚本获取输入的 Python 脚本
- java - 构建应用程序包时出错 - 完整性检查失败:jAlgorithm HmacPBESHA256 不可用
- python - I'm trying to keep my csv files in monthly order like may, jun etc and trying to change the order with python, but unable to do that
- ios - 如何从按钮添加垂直堆栈(用户输入)[Xcode]
- r - 如何并行填充一个非常大的数组R
- mongoose - 不包括 Strapi Mongoose Virtuals
- google-apps-script - 谷歌表格宏脚本
- lua - 在 Lua 中使用加法而不使用结果
- visual-studio-code - VSCode 扩展可以用 ReasonML 编写吗?