我想知道我是否可以在一个SQL查询中想要我想要的,目前我的数据库在服务器中运行缓慢,我试图尽可能地减少查询。
我需要查询3件事:
到目前为止,我只找到了在2个查询中执行此操作的方法,因为我似乎无法限制预取而不会限制整个查询。
这是我的代码:
images = Image.objects.filter().order_by('-id').distinct().prefetch_related('tags')[:20]
amount = images.count()
这导致2个数据库查询,我该如何制作这个?
答案 0 :(得分:0)
以上陈述不是2个数据库查询。 Prefetch_related将生成与每个图像的m2m关系一样多的数据库查询。 所以基本上是1 + total_number_of_tags_of_queryset_images
如果您不提取标签,那么获取20或100张图片并不重要。它将是1个查询。
所以你所做的最好,但先得到计数。否则计数将始终为20。
count = Images.objects.all().count()
images = Image.objects.all().order_by('-id').distinct().prefetch_related('tags')[:20]
因此,您无法在1个查询中进行此操作。