gpt4 book ai didi

python - 使用 django 模型有效获取数据

转载 作者:行者123 更新时间:2023-11-30 23:26:09 25 4
gpt4 key购买 nike

我正在使用 Django,我有一个关于模型的问题。我有 2 个模型,都与“ManyToMany”字段相关。

我想要一个查询来获取所有标签的数据、带有该标签的最后一张图像以及带有该标签的图像的数量。我使用了这段代码

        selargs = (
'id',
'image__title',
'image__smallImage',
'image__smallWidth',
'image__smallHeight',
'name',
'nameCleaned')

tags = Tag.objects.values(*selargs).annotate(
imageCount=Count('image__id')).order_by('-image__date')

代码可以工作,但问题是sql语句,是这样....pfff

SELECT "gallery_tag"."id", "gallery_image"."title", "gallery_image"."smallImage", "gallery_image"."smallWidth", "gallery_image"."smallHeight", "gallery_tag"."name", "gallery_tag"."nameCleaned", COUNT("gallery_image_tags"."image_id") AS "imageCount" 
FROM "gallery_tag"
LEFT OUTER JOIN "gallery_image_tags" ON ( "gallery_tag"."id" = "gallery_image_tags"."tag_id" )
LEFT OUTER JOIN "gallery_image" ON ( "gallery_image_tags"."image_id" = "gallery_image"."id" )
GROUP BY "gallery_tag"."id", "gallery_image"."title", "gallery_image"."smallImage", "gallery_image"."smallWidth", "gallery_image"."smallHeight", "gallery_tag"."name", "gallery_tag"."nameCleaned", "gallery_image"."date"
ORDER BY "gallery_image"."date"

不知道这个有没有效果。有没有更好的办法?重要的是我在一次操作中获取数据,因为在我在分页器中使用此查询来限制记录之后。是否可以在一个查询中执行此操作,或者最好使用更多模型操作?

谢谢。

最佳答案

如果它没有损坏,就不要修复它 - 这延伸到了 Python/Django 中的优化。您可以花费一半的开发时间来优化代码的一小部分,但这仍然几乎不会产生任何影响。只需确保为您的应用程序使用正确的架构即可。

您需要避免对每个请求执行大量查询,因为即使在小型应用程序中,差异也会很明显(如果它还没有让您发疯的话)。不要在 for 循环中构建查询集,并在适用的情况下使用 select_lated()prefetch_lated(),就可以了。

您的情况下的查询绝对没问题。 LEFT OUTER JOIN 跨数据库引擎(甚至跨多个表)进行了很好的优化。分页通过限制数据库级别来防止大型结果集堵塞系统资源。

如果您发现某个请求持续花费相当多的时间,那么 - 只有到那时 - 才需要对您的应用程序进行分析并找出导致速度下降的确切原因 - 当然还要进行修复。

关于python - 使用 django 模型有效获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22675840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com