【发布时间】:2015-12-31 21:20:25
【问题描述】:
我正在尝试使用 Django 使用包含 600 万条记录的文件中的数据填充 SQLite 数据库。然而,即使有 50000 条记录,我编写的代码也会给我带来很多时间问题。
这是我试图填充数据库的代码:
import os
def populate():
with open("filename") as f:
for line in f:
col = line.strip().split("|")
duns=col[1]
name=col[8]
job=col[12]
dun_add = add_c_duns(duns)
add_contact(c_duns = dun_add, fn=name, job=job)
def add_contact(c_duns, fn, job):
c = Contact.objects.get_or_create(duns=c_duns, fullName=fn, title=job)
return c
def add_c_duns(duns):
cd = Contact_DUNS.objects.get_or_create(duns=duns)[0]
return cd
if __name__ == '__main__':
print "Populating Contact db...."
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from web.models import Contact, Contact_DUNS
populate()
print "Done!!"
代码运行良好,因为我已经使用虚拟记录对此进行了测试,并且它给出了预期的结果。我想知道是否有一种方法可以降低此代码的执行时间。谢谢。
【问题讨论】:
-
ORM 很少擅长批量操作(任何语言)。他们需要在内存中创建对象、跟踪状态等……他们还倾向于低效地使用连接,而不是优化/批处理多个操作。更糟糕的是,您要求 ORM 在选择操作(插入/更新)之前检查对象是否存在,这会增加每条记录的开销。根据您使用的数据库引擎,查看适当的批量导入工具或(至少)生成原始 SQL 语句。
标签: python django performance