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

问题描述

在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()):

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...