Django:预取相关:for循环:根据我们调用for循环的方式,sql调用的次数会有所不同



在django中,我试图理解预取:

在预取之后,我有两个针对循环的场景

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_listQueryset限制为10个对象,并使用预取相关为其缓存相关数据

但是您正在遍历数据库中的所有对象(注意计数(

for i in range(0,symbollist.count()):

最新更新