【问题标题】:django gives duplicate error everytime the project runs每次项目运行时,django 都会出现重复错误
【发布时间】:2019-11-24 19:10:36
【问题描述】:

我正在尝试将 response_body 中的一些数据添加到我的数据库“仪表板”中的“犯罪”表中

我只想添加此数据一次,因此第一次将数据成功添加到我的数据库但之后它给了我这个错误,因为它显然拒绝为另一个设置为唯一的 oid 创建重复条目

我怎样才能修改我的代码,以便只添加一次数据并且不添加重复数据并且它不会给我这个错误django.db.utils.IntegrityError: (1062, "Duplicate entry '4767' for key 'PRIMARY'")

下面是我的代码。 我已经从 models.py 创建了表并从 views.py 添加了数据,因为数据存在于 views.py 中,并且从这里添加数据更容易。

如果有其他合适的方法请建议。

models.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"

views.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'])

【问题讨论】:

    标签: mysql django python-3.x django-models django-views


    【解决方案1】:

    使用 Django 的get_or_create

    obj, created = Offenses.objects.get_or_create(oid=j['id'], defaults={'description': j['description']})
    

    【讨论】:

    • 如果我要添加另一个字段来保存它,它会显示一个 key_error。
    • response_body = json.loads(response.read().decode('utf-8')) for j in response_body: obj, created = Offenses.objects.get_or_create(oid=j['id'], defaults={'description': j['description'], 'assigned_to': j['assigned_to'], 'magnitude': j['magnitude']}) --- 所以量级在数据库中是 int 类型,应该返回一个数字。
    • 这看起来像是一个与此问题无关的错误。考虑打开一个新线程。你确定 j['magnitude'] 总是被定义吗?
    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2017-02-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多