为什么我的django批量数据库数量如此之慢并经常失败?

时间:2011-01-14 04:34:45

标签: database django django-models sqlite

我决定使用django的模型系统而不是编写原始SQL来与我的数据库进行交互,但我遇到的问题肯定是可以避免的。

我的models.py包含:

class Student(models.Model):
    student_id = models.IntegerField(unique = True)
    form = models.CharField(max_length = 10)
    preferred = models.CharField(max_length = 70)
    surname = models.CharField(max_length = 70)

我通过循环遍历列表来填充它:

from models import Student

for id, frm, pref, sname in large_list_of_data: 
   s = Student(student_id = id, form = frm, preferred = pref, surname = sname)
   s.save()

我真的不想每次都将它保存到数据库中,但我不知道另一种方法让django不要忘记它(我宁愿添加所有行然后再做一次提交)

代码有两个问题。

  1. 这很慢 - 每秒约有20名学生获得更新。

  2. 它甚至没有通过large_list_of_data,而是抛出一个说“无法打开数据库文件”的DatabaseError。 (可能是因为我使用的是sqlite3。)

  3. 我的问题是:我怎样才能阻止这两件事发生?我猜这两个问题的根源是我有s.save(),但是我没有看到一种方法可以轻松地将学生批处理,然后将它们保存在数据库的一次提交中。

1 个答案:

答案 0 :(得分:5)

所以在提出问题之前我似乎应该更加努力。

描述了一些解决方案in this stackoverflow question(获胜的答案是使用django.db.transaction.commit_manually)和in this one聚合保存。

this stackoverflow question中列出了加速此类操作的其他想法。