Djang中如何按id和count进行分组

2024-04-24 15:37:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在转换编写正确的Python脚本时遇到问题,该脚本可以完成我在MYSQL中所能完成的任务

下面是一个SQL查询,它完全满足了我的要求。我在pythonGROUP BY语句中被绊倒了。

SELECT COUNT(story_id) AS theCount, `headline`, `url` from tracking
GROUP BY `story_id`
ORDER BY theCount DESC
LIMIT 20

到目前为止,这是我在python中所拥有的。这可以很好地查询所有的文章,但是它缺少任何基于COUNTgroupby()order_by()

articles = ArticleTracking.objects.all().filter(date__range=(start_date, end_date))[:20]

article_info = []    
for article in articles:
    this_value = {
        "story_id":article.story_id,
        "url":article.url,
        "headline":article.headline,
        }

    article_info.append(this_value)

Tags: info脚本idurldatebyvaluecount
2条回答

正确的方法是使用聚合。

articles = ArticleTracking.objects.filter(date__range=(start_date, end_date))
articles = articles.values('story_id', 'url', 'headline').annotate(count = Count('story_id')).order_by('-count')[:20]

还要查看Django中的聚合文档。

https://docs.djangoproject.com/en/dev/topics/db/aggregation/

别在家里试试这个。

您可以将group_by子句添加到查询集,如下所示:

qs = ArticleTracking.objects.all().filter(date__range=(start_date, end_date))
qs.query.group_by = ['story_id']
articles = qs[:20]

这不是公共api的一部分,因此它可能会更改,并且根据您正在使用的特定db后端,其工作方式可能不同(或不可用)。值得一提的是,我不确定在筛选之前或之后应用group_by子句是否有什么不同。不过,我在MySQL后端已经取得了成功。

相关问题 更多 >