批量存在性检查 + 保存 - Django

5 投票
4 回答
1061 浏览
提问于 2025-04-16 08:28
  • 我有一个CSV文件,里面列出了我需要存储到数据库中的项目。

  • 我需要检查哪些项目还没有存储,如果没有存储的话,就把它们保存到数据库里。

  • 这个文件大约有200万到500万行数据。


我使用的是Django的用户模型。

我的CSV文件格式如下:

项目_ID, 姓氏, 保单号, 性别, 称谓, 开始日期

这是代码:

import csv

reader = csv.reader(open('items.csv', 'rb'))

for index, row in enumerate(reader):
    if User.objects.filter(username=row[2]).count():
        continue
    try:
        user = User(username=row[2],last_name=row[1],password='*')
        user.save()
    except Exception, e:
        print e
    del user
    del row
    del index

你有什么推荐的方法吗?

4 个回答

2

这要看具体情况。如果CSV数据可以转化为一个模型,可以按照以下步骤进行:

  • 加载CSV数据
  • 对每一行数据:
    • 检查是否已经有对应的模型存在
    • 如果没有:
      • 根据数据创建一个新的模型并保存。

补充:
我觉得一次性检查所有模型是否存在会比较困难。一次性保存模型会更快,但根据模型的复杂程度,我觉得还是逐个处理更安全。

2

试试这个。使用 count() 这个方法会非常耗费资源。

for index, row in enumerate(reader):
    try:
        User.objects.get(username=row[2])
    except User.DoesNotExist:
        user = User(username=row[2],last_name=row[1],password='*')
        user.save()
1

你需要先加载CSV文件,然后用get_object_or_create这个方法逐行检查每一行的数据,看看这个对象是否已经存在。如果不存在,它就会帮你创建一个。如果你把models.py的代码给我们,我们可能能更具体地帮助你。

撰写回答