Django查詢集應該是懶惰的,但它會像下面那樣接縫。在objects.all()上進行過濾在Django中表現得不是很懶
我有以下(5秒)慢代碼(200,000記錄):
1. qs = MyCars.objects.all()
2.
3. qs = qs.filter(car_id__gt=0)
以下濾波是快:
A. qs = MyCars.objects.filter(car_id__gt=0)
我錯過了什麼? (因爲我必須包括第1行)。
使其更有趣。如果我第2行地址:
2. qs2 = qs
,然後在7號線:
7. qs2 = qs2.filter(car_id__gt=0)
然後是快。
所以,我想我會使用qs2來過濾第3行,但它很慢。
他們應該都是瞬間的,因爲你沒有對'qs'做任何事情,所以他們沒有被評估。你是否顯示了所有的代碼? –
我有大約8000行的代碼,但涉及的行都在上面說明了。我在每一行之間打印(' - '),並且看到保留的位置。 – Jon
絕對有其他傷害表現的東西。一個明顯的驗證方法是django shell。如果你在django shell中運行你的查詢,我敢打賭他們會立即返回。 –