据我所知,django查询集是惰性的,在求值之前不会命中db,在这种情况下,将查询集分配给dict中的键后,以下几行会导致每次都命中db吗?请告知
abc = model1.objects.all()
content = {
'entry' : abc, # Once assigned will the below lines hits db?
'entry_count' : abc.count(), # will this hit db
'entry1_count' : abc.filter(name__icontains = 'a').count(), # will this hit db
'entry2_count' : abc.filter(name__icontains = 'b').count(), # will this hit db again?
}
return render(request, template, content}
在除第一种情况外的所有情况下,它都会命中数据库。
理论部分见文件:https://docs.djangoproject.com/en/2.2/topics/db/queries/
您可以使用django调试工具栏来查看每个呈现页面的所有SQL查询
您还可以看到哪个查询正在以编程方式执行。例如:
abc.count()
您可以通过以下操作查看SQL查询:
print(abc.count().explain())