2011-01-14 3 views
4

필자는 데이터베이스와 인터페이스하기 위해 원시 SQL을 코딩하는 대신 장고의 모델 시스템을 사용하기로 결정했다.하지만 피할 수없는 문제가있다.왜 장고 대량 데이터베이스는 너무 느리고 자주 실패합니까?

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) 

다음과 같이 나는 목록을 통해 반복하여 채우기 해요 : :

내 models.py이 포함

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() 

은 정말이 절약되고 싶지 않아 데이터베이스 때마다하지만 나는 그것을 잊지 않고 장고를 얻을 수있는 다른 방법을 모르겠다. (나는 모든 행을 추가하고 단일 커밋을한다.)

코드에는 두 가지 문제점이 있습니다.

  1. 약 20 명의 학생이 매 초마다 업데이트됩니다.

  2. "데이터베이스 파일을 열 수 없습니다"라는 DatabaseError가 대신 large_list_of_data를 통과하지 못합니다. (내가 sqlite3를 사용하고 아마도 때문이다.)

내 질문은 : 나는 일어나는 이러한 두 가지를 중지 할 수 있습니까? 나는 두 가지 문제점의 근원이 s.save()를 가졌다 고 생각하지만 쉽게 학생들을 일괄 처리 한 다음 데이터베이스에 하나의 커밋으로 저장하는 방법을 보지 못한다.

+0

만약 내가 귀하의 질문을 받고있어, 내가 장바구니 ModelForm의 훨씬 더 깨끗한 방법으로 UR 데이터베이스에 값을 저장하는 데 사용할 수있을 것 같아요. 만약 내가 plz 쓸 회신 – Prateek

+0

@ Prateek - 아니 내가 데이터를 추가하기위한 양식을 만드는 데 관심이 아니에요 - 나는 large_list_of_data에서 자동으로 데이터베이스를 채울거야. 수동으로 더 많은 데이터를 추가하기위한 인터페이스는 별도의 문제입니다. – bryn

답변

5

그래서 나는 질문을하기 전에 더 열심히보아야했습니다.

일부 솔루션은 in this stackoverflow question (승리하는 대답은 django.db.transaction.commit_manually를 사용하는 것입니다) 및 집계 저장시 in this one으로 설명됩니다.

이러한 유형의 작동 속도를 높이기위한 다른 아이디어는 this stackoverflow question입니다.

관련 문제