[英]Django prefetch_related cache not reflecting the changes
我有一個樣板銀行 。 我有六個實體 。
這是我的預取代碼。
queryset = Banks.objects.all().prefetch_related('field1','field2')
當我在Banks模型中輸入新實體並獲取數據時,我仍然僅獲得舊數據。 下載數據時,新添加的實體未得到反映。
請記住,與QuerySet一樣,任何暗示不同數據庫查詢的后續鏈接方法都將忽略先前緩存的結果,並使用新的數據庫查詢來檢索數據。 因此,如果您編寫以下內容:
>>> pizzas = Pizza.objects.prefetch_related('toppings')
>>> [list(pizza.toppings.filter(spicy=True)) for pizza in pizzas]
…然后預取pizza.toppings.all()
的事實將無濟於事。 prefetch_related('toppings')
pizza.toppings.all()
prefetch_related('toppings')
暗示pizza.toppings.all()
,但pizza.toppings.filter()
是一個新的不同查詢。 預取的緩存在這里無濟於事。 實際上,這會影響性能,因為您已經執行了未使用的數據庫查詢。 因此,請謹慎使用此功能!
另外,如果在相關管理器上調用數據庫更改方法add()
, remove()
, clear()
或set()
,則將清除該關系的任何預取緩存。
來自文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.