2013-08-08 2 views
0

HI 나는이를 실행하고사용 F

getteam = myteam.objects.only("id") # [:2] limits the query to 2 just for testing 
for i in getteam: 
    gettraining = training.objects.get(teamID=i.id) # because for now the traning table is empty 

    getPrimary = gettraining.primary 
    if getPrimary == 1 or getPrimary == 0 : 
     getteamPlayers = teamPlayers.objects.filter(teamId=i.id) 
     for t in getteamPlayers : 
      getmyplayer= myplayer.objects.get(id=t.playerId) 
      getPlayerAge = getmyplayer.age  
      increase = max(0, (1+((MIDAGE - getPlayerAge) * MULTIPLIER)/100) * 0.05/9) 
      getvitals = vitals.objects.get(playerID=t.playerId) 
      getvitals.velocity = min(max(getvitals.velocity + increase,0),1) 
      getvitals.power = min(max(getvitals.power + increase,0),1) 
      getvitals.arm = min(max(getvitals.arm + increase,0),1) 
      getvitals.ranges = min(max(getvitals.ranges + increase,0),1) 
      getvitals.save() 
      print t.playerId 

코드를 아래

데이터베이스

에서 데이터를 업데이트하기 위해 참조하는 2 ~ 3 테이블을 사용하는 스크립트를되어 있습니다 터미널에서 스크립트를 사용하고 싶습니다. f 클래스 나 업데이트와 같은 것을 사용하고 싶습니다. 업데이트하는 데 너무 많은 시간이 걸리므로 어떻게 삽입 속도를 늘리거나 사용할 수 있는지 제안 해주십시오.

+0

당신이 관련 모델을 보여 주시겠습니까 :

from django.db import transaction with transaction.commit_on_success(): # your code here 

또는 함수 장식으로

? 나는 팀 당 4 개의 쿼리가 아닌'select_related()'에 1-3 개의 쿼리를 사용하여 필요한 모델을로드하는 것만으로도 상당한 속도 향상이 이루어질 것이라고 확신한다. –

답변

0

극적인 성능 향상이 가능했습니다. 한 번에 업데이트 기능 실행 .

자세한 내용은 Django database transaction management을 참조하십시오. 당신은 컨텍스트 관리자로 사용할 수 있습니다 django.db.transaction.commit_on_success의 사용을 고려할 수 :

from django.db import transaction 


@transaction.commit_on_success 
def update_function(): 
    # your code here 
+0

이것은 도움이되지 않습니다. 기존 코드는 루프 당 4 개의 쿼리와 저장을 실행합니다. 이것이 병목 현상입니다. –