2009-09-18 52 views
5

我有一個愚蠢的簡單循環Django的:遍歷查詢集而不緩存

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

但尋找到Django的查詢集,似乎把所有以前的結果的_result_cache左右。這是吃我的機器的演出和吉格斯,最終一切都炸了。

我該如何扔掉所有我永遠不會在乎的東西?

+0

儘量不要使用別名作爲變量名 - 它是關鍵字 – uolot 2009-09-18 09:23:27

+4

否,別名不是關鍵字。 – u0b34a0f6ae 2009-09-18 09:34:24

回答

11

使用查詢集的iterator()方法返回成塊的模型,不填充結果緩存:

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

當我使用你的電話時,它仍然咀嚼大量的RAM。 :( – 2009-09-18 08:52:33

+1

這是事實,mysql查詢緩衝,導致所有內存故障。 – 2009-09-19 14:25:52

+3

您是否嘗試將DEBUG設置爲False?請參閱http://docs.djangoproject.com/en/dev/faq/models/ #why-is-django-leaking-memory這比使用迭代器更有幫助:) – pcv 2011-03-19 20:13:40

0

你應該考慮保存更改回數據庫。

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

好吧,update_points()調用save() – 2009-09-18 22:21:29