2011-01-14 2 views
4

Я решил использовать системную модель django вместо того, чтобы кодировать необработанный SQL для взаимодействия с моей базой данных, но у меня есть проблема, которую можно избежать.Почему моя база данных базы данных django настолько медленная и часто не работает?

Мой 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.)

Мой вопрос: как я могу остановить эти две вещи? Я предполагаю, что корень обеих проблем заключается в том, что у меня есть s.save(), но я не вижу способ легко дозировать студентов, а затем сохранять их в одной фиксации в базе данных.

+0

Если у меня возник вопрос, я думаю, вы можете использовать django ModelForm, который является гораздо лучшим и чистым способом сохранения значений в базе данных ur. Если я напишу plz, ответьте – Prateek

+0

@Prateek - Нет. Я не заинтересован в создании форм для добавления данных. Я автоматически заполняю базу данных из файла large_list_of_data. Отдельным вопросом является интерфейс для добавления дополнительных данных вручную. – bryn

ответ

5

Так что мне кажется, что я должен был выглядеть сложнее, прежде чем задавать вопрос.

Некоторые решения описаны in this stackoverflow question (выигрышный ответ - использовать django.db.transaction.commit_manual), а также in this one при агрегировании сейвов.

Другие идеи для ускорения этого типа операций перечислены в this stackoverflow question.

Смежные вопросы