批量存在性检查 + 保存 - Django
我有一个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的代码给我们,我们可能能更具体地帮助你。