2009-09-18 15 views
5

olmadan sorgu kümesini üzerinde yineleme benDjango: cache

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

ama django içine bakarak o önceki tüm sonuçların bir _result_cache etrafında tutmak gibi görünüyor sorgu kümesi aptal basit döngü var. Bu, makinemin Gigs ve Gigs yiyor ve sonunda her şey patlar.

Önem vermeyeceğim her şeyi nasıl atabilirim?

+0

, alias'i değişken ad olarak kullanmamaya çalışın. Bu, – uolot

+4

numaralı bir anahtar sözcüktür, alias bir anahtar sözcük değildir. – u0b34a0f6ae

cevap

11

sonuç önbelleği doldurma olmadan büyük kümeler halinde modelleri dönmek için sorgu kümesi en iterator() yöntemi kullanın:

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

Aramanızı kullandığımda hala bir ton RAM'i çiğniyor. :( –

+1

Mysql sorgusunun tüm ram sorunlarına neden olan tamponlandığı gerçeğidir. –

+3

DEBUG öğesini False olarak ayarlamayı denediniz mi? Bkz. Http://docs.djangoproject.com/en/dev/faq/models/ # why-is-django-leaking-memory Bu, bir yineleyici kullanmaktan çok daha fazlasına yardımcı oldu :) – pcv

0

geri veritabanına değişiklikleri kaydetmeden düşünmelisiniz.

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

iyi, update_points() çağrıları kaydet() –