【问题标题】:Getting error by Django insert queries caused by duplicates由重复导致的 Django 插入查询出错
【发布时间】:2018-12-07 07:34:41
【问题描述】:

我正在尝试将一些数据添加到用 Django 制作的表中。

这是我的代码:

class Prefixe(models.Model):
    remote_as = models.CharField(max_length=250)
    prefix_list = models.CharField(max_length=250, unique=True)


def insert():
    p = Prefixe(remote_as='Apress', prefix_list='Berkeley')
    p.save()

我正在使用 ORM 创建记录,但由于“重复”异常而失败(请参阅 prefix_list 定义中的 unique 选项)。

但是,如果我使用特定的 PG 选项将插入作为原始 SQL 进行插入,则有一种方法可以避免此异常:

INSERT INTO "peer_table" ("remote_as","prefix_list")
VALUES('{}','{}')
ON CONFLICT DO NOTHING

在通过 ORM 工作时,我能否避免这种由重复引起的异常?

【问题讨论】:

  • 如果出现错误,我认为 Python 解决方案也不会接受重复项,对吗?您只是缺少错误处理,这取决于您未提供详细信息的错误类型。一种可能的方法,异常处理,是通过 try/except。
  • 在 Python 中有效!因为我使用 postgres(ON CONFLICT DO NOTHING)
  • 那么你问题的最后一行是什么意思?

标签: python django


【解决方案1】:

您的代码可以从使用.get_or_create() 方法中受益:

def insert(remote_as, prefix_list):
    p, was_created = Prefixe.objects.get_or_create(
        remote_as=remote_as, prefix_list=prefix_list)

    if was_create:
        print('a new instance was created.')
    else:
        print('the instance already exists.')

【讨论】:

    猜你喜欢
    • 2023-01-26
    • 2021-10-15
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2017-05-24
    相关资源
    最近更新 更多