2012-06-20 3 views
1

그 자체로 나는 모든 모델을 가져 와서 내 데이터베이스에 넣을 수있는 디시리얼라이저가 있습니다. 불행히도 모든 단일 모델로 데이터베이스에 도달하므로이 작업을 중단하고 싶습니다.장고 질의를 결합하여 한 번에 저장할 수있게하려면 어떻게해야합니까?

많은 짧은 저장을 하나의 큰 저장에 덩어리로 만들 수있는 방법이 있습니까?

예제 코드 :

def deserialise(xml): 
    for x in model_list: 
     do work to make instance... 
     instance.save() 
    return True 

는 for 루프에서 인스턴스의 절약을 이동하는 방법이 있습니까?

답변

4

transaction.commit_manually()을 사용할 수 있습니다. 함수가 성공적으로 반환 할 때와 경우 자동으로 커밋됩니다

from django.db import transaction 

@transaction.commit_manually 
def deserialise(xml): 
    for x in model_list: 
     # do work to make instance... 
     instance.save() 
    transaction.commit() 
    return True 

또는 transaction.commit_on_success()을 절약 할 수 있습니다. 장고 1.4 또는


from django.db import transaction 

@transaction.commit_on_success 
def deserialise(xml): 
    for x in model_list: 
     # do work to make instance... 
     instance.save() 
    return True 

이있다 또한 bulk_create()하지만 문서에 나와있는주의 사항을주의 않습니다.

+0

우수 답변 :) 나는 그 일을 할 수 있는지 전혀 몰랐습니다! – Jharwood

+0

플러스 we are django 1.3 :) – Jharwood

관련 문제