2012-12-11 5 views
0

직렬화 된 데이터를 반환하는 요청을하고 있습니다. 데이터를 반복하여 데이터베이스에 존재하는지 확인합니다. 존재하면 무시되고 존재하지 않으면 저장됩니다. 내가 가지고있는 문제는 for 루프가 데이터의 모든 키를 반복하고 데이터베이스의 내용과 비교하더라도 첫 번째 레코드 만 저장한다는 것입니다. 함수가 카운터를 실행for 루프의 각 반복 저장

b = MyModel() 
data #The serialized data 
existingData = Off.object.filter(...) 

for key in data: 
    if existingData.filter(id_str=key['id_str']).exists(): 
     pass #If I place a print key['id_str'] here, all skipped items are printed. 
    else: 
     b.x = key['x'] 
     b.y = key['y'] 
     b.save() 

때마다 b.save() 후 다른 문 하단에있는 카운터 증가 배치되어 있지만 검사를 통과 첫 번째 레코드를 저장하고 나머지 다음과 같이 내 코드는 데이터 항목이 저장되지 않습니다. 내가 어디로 잘못 가고 있니? 모든

+0

문제가 'MyModel.save'에 없다는 것을 어떻게 알 수 있습니까? – mgilson

+0

내가 확인할 수있는 방법이 있습니까? 내가 이것을 테스트하기 위해 처음 작성했을 때 나는 데이터를 3 번 ​​되찾고 모든 키를 3 번 ​​저장했다. 이제는 단지 1 :-( –

+2

을 저장합니다. 다른 답변을 수락하면 우리가 도와 드리겠습니다. –

답변

2

먼저 이 같은b 개체를 덮어 쓰는 대신 이 새을 만들 수 있습니다; 나는 당신이 어떤 id_str이있는 객체가 존재하지 않는지 확인하지만, 단지 bxy 속성을 덮어 쓴다. 어쩌면 당신이해야 할 것은 :

for item in data: 
    if not existingData.filter(id_str=item.get('id_str')).exists(): 
     MyModel.objects.create(id_str=item.get('id_str'), 
           x=item.get('x'), 
           y=item.get('y')) 

희망이 :)

건배를하는 데 도움이!

+0

이번에는 동의하는 것을 잊지 않았습니다 .-- 덕분에 도움을받을 수 있습니다. –

+1

루프 내에서 데이터베이스 작업을 수행하는 것은 일반적으로 바람직하지 않습니다. 반복 횟수가 느려지는 것을 확실하게 확신 할 수없는 경우가 아니면 작업에서 벗어나 실제로 느려질 수 있습니다. 앞으로 나아갈 생각인가. –

+0

그건 절대적으로 사실입니다! – Gerard