我有 CSV 文件,其中列出了我需要存储在数据库中的项目。
我需要检查哪些项目尚未存储,如果没有存储,我需要将它们保存在数据库中。
2-5百万行。
该模型是Django的用户模型。
我有一个以下格式的CSV文件:
Item_ID,姓氏, Policy_number ,性别,标题,Start_date
这是代码:
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
您推荐的任何方法?
答案 0 :(得分:2)
取决于具体情况。如果可以将csv数据转换为模型,则应该执行以下操作:
修改强>
我认为批量检查存在将是困难的。
模型的批量保存会更快,但根据模型的复杂程度,我认为每个模型都可以省力。
答案 1 :(得分:1)
您需要加载CSV文件,然后使用get_object_or_create方法检查每一行,检查对象是否存在,如果没有,则会为您创建。如果您向我们展示models.py代码,我们可能会更具体地帮助您。
答案 2 :(得分:1)
如果您的内存可以处理用户名变量,这可能是一个很好的优化。
import csv
reader = csv.reader(open('items.csv', 'rb'))
usernames = User.objects.values('username')
for index, row in enumerate(reader):
if row[2] in usernames:
continue
User.objects.create(username=row[2],last_name=row[1],password='*')
如果确实存在内存问题,您可以查看一下这个(现有的)答案: Question about batch save objects in Django
答案 3 :(得分:1)
试试这个。 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()