我决定使用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不要忘记它(我宁愿添加所有行然后再做一次提交)
代码有两个问题。
这很慢 - 每秒约有20名学生获得更新。
它甚至没有通过large_list_of_data,而是抛出一个说“无法打开数据库文件”的DatabaseError。 (可能是因为我使用的是sqlite3。)
我的问题是:我怎样才能阻止这两件事发生?我猜这两个问题的根源是我有s.save(),但是我没有看到一种方法可以轻松地将学生批处理,然后将它们保存在数据库的一次提交中。
答案 0 :(得分:5)
所以在提出问题之前我似乎应该更加努力。
描述了一些解决方案in this stackoverflow question(获胜的答案是使用django.db.transaction.commit_manually)和in this one聚合保存。
this stackoverflow question中列出了加速此类操作的其他想法。