问题描述
在django中,我试图了解预取:
预取后,我有两个for循环方案
symbollist = SymbolList.objects.prefetch_related('some_related_name')[0:10]
for i in range(0,10):
print(symbollist[i].some_related_name)
现在它调用sql N + 1次
哪里
symbollist = SymbolList.objects.prefetch_related('some_related_name')[0:10]
for symbol in symbollist:
print(symbol.some_related_name)
这只会调用两个sql
为什么
解决方法
您将symbol_list
Queryset限制为10个对象,并使用prefetch_related为其缓存相关数据
但是您要遍历数据库中的所有对象(通知计数)
for i in range(0,symbollist.count()):