2009-09-18 19 views
5

Mam głupie prostą pętlęDjango: iteracyjne nad zestawu zapytań bez cache

for alias in models.Alias.objects.all() : 
    alias.update_points() 

ale patrząc w Django queryset wydaje się utrzymać wokół _result_cache wszystkich poprzednich wyników. To jedząc koncerty i występy mojej maszyny i ostatecznie wszystko wysadza się w powietrze.

Jak mogę wyrzucić wszystkie rzeczy, których nigdy nie będę obchodzić?

+0

staram się raczej nie używać aliasu jako nazwy zmiennej - jest to słowo kluczowe – uolot

+4

nie, alias nie jest słowem kluczowym. – u0b34a0f6ae

Odpowiedz

11

Użyj iterator() metodę queryset do powrotu modeli w kawałkach, bez wypełniania bufora Wynik:

for alias in models.Alias.objects.iterator() : 
    alias.update_points() 
+4

Wciąż przeżuwa tonę RAM, kiedy używam twojego połączenia. :( –

+1

To jest fakt, że zapytanie mysql jest zbuforowane, które powoduje wszystkie problemy z ramkami: –

+3

Czy próbowałeś ustawić DEBUG na False? Patrz http://docs.djangoproject.com/en/dev/faq/models/ # why-is-django-leaking-memory To pomogło znacznie więcej niż użycie iteratora :) – pcv

0

Należy rozważyć zapisywania zmian z powrotem do bazy.

for alias in models.Alias.objects.all() : 
    alias.update_points() 
    alias.save() 
+1

również, update_points() wywołania save() –

Powiązane problemy