django - Django 批量创建检查已经存在于批量对象和实例中?

标签 django postgresql django-models

我有很多数据,这些数据很脏,例如:

表 ORM:

id = models.CharField(default='', max_length=50)
time = models.DateTimeField(default=timezone.now)
number = models.CharField(default='', max_length=20)
value = models.CharField(default='', max_length=20)

unique_together = ['id', 'time', 'number']

表数据:

id   time                   number   value
 1     2018-07-16 00:00:00   1         64
 1     2018-07-16 00:00:00   2         -99
 1     2018-07-16 00:00:00   3         655
 1     2018-07-16 00:00:00   4         3
 2     2018-07-16 00:00:00   0         12

导入数据(示例):

id   time                   number   value
 1     2018-07-16 00:00:00   1         64
 3     2018-07-16 00:00:00   0         -99
 3     2018-07-16 00:00:00   0         11
 4     2018-07-16 00:00:00   0         -99
 4     2018-07-16 00:00:00   1         -99

所以,当我这样做的时候

for loop....
    objs = []
    objs.append(A(**kwargs))
A.objects.bulk_create(objs, batch_size=50000) 

它会引发两种重复。

  1. 表已经存在"1 2018-07-16 00:00:00 1"
  2. Import Datas already exist 3 2018-07-16 00:00:00 0 在 objs 中两次,所以当我批量创建时它会引发重复,然后它会回滚所有提交! !!

“1”,我可以用get或者create来解决 但是“2”,我现在无法检查我附加的数据是否存在于 objs 中 我试图用它来检查是否存在,但是当数据行超过 1000000 时, 复杂性将是可怕的。

def search(id, time, number, objs):
    for obj in objs:
        if obj['id'] == id and obj['time'] == time and obj['number'] == number:
            return True
    return False

有没有更好的办法?谢谢。

最佳答案

您可以添加一个包含idtimenumber 的元组到set:

objs = []
duplicate_check = set()
for loop....
    data = kwargs['id'], kwargs['time'], kwargs['number']
    if not data in duplicate_check:
        objs.append(A(**kwargs))
        duplicate_check.add(data)
A.objects.bulk_create(objs, batch_size=50000) 

set 操作的复杂度为 O(1)。

关于django - Django 批量创建检查已经存在于批量对象和实例中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51358190/

相关文章:

c# - 无法使用来自 EF 的 View 自动生成 Controller

php - 更新查询 php postgres 无故失败

Django 管理员 : how to display fields from two different models in same view?

django - 编写一个同时显示基于日期的对象和表单的基于 django 类的 View 的好方法是什么?

sql - Django 似乎错误地声称存在 SQL 语法错误

sql - 使用 PostgreSQL 执行 SQL 语句时出错

python - get_object_or_404 django 失败

Django:外键查询

python - 如何在命令提示符下运行 Django 开发服务器?

python - 使用 @login_required 而不将 "?next=/"附加到 URL