【问题标题】:Integrate Raw SQL Query into Django ORM with Aggregations使用聚合将原始 SQL 查询集成到 Django ORM 中
【发布时间】:2020-08-28 07:13:48
【问题描述】:

我正在尝试将此 RAW 查询集成到 django ORM 查询中,但我在应用原始查询和 orm 查询时遇到了问题

与 postgres 查询工具配合使用的原始查询:

"SELECT SUM(counter),type, manufacturer 
FROM sells GROUP BY manufacturer, type"

现在我尝试将其集成到 django-orm 查询中,如下所示:

res_postgres = Sells.objects.all().values('manufacturer','type','counter').aggregate(cnter=Sum('counter'))

但我得到的只是一个计数器中心......

我需要的是原始查询的结果,如下所示

我还尝试使用值和字段名称。像 Sells.objects.values('manufacturer'....).aggregate(cnter=Sum(counter)) 但随后 django 正在构建一个集成了 GROUP BY id 的查询。这不是我需要的。我需要聚合整个数据而不是对象级别,同时保留其他字段的信息。

当我使用 Cars.objects.raw() 时,它会询问我有关主键的信息,而我也不需要。

这里有什么提示吗? Django ORM 有可能吗?

【问题讨论】:

    标签: django


    【解决方案1】:

    使用annotate(...) 代替aggregate()

    res_postgres = Sells.objects.values('manufacturer','type')<b>.annotate(</b>cnter=Sum('counter'))

    【讨论】:

    • 感谢答案。这给了我对象级别的数据,但没有聚合......在我的情况下,我还在数据库中保存一个日期,然后返回许多带有单独计数器的行......
    • print(res_postgres.query) 的结果是什么?
    • 啊,是的,你是对的!对不起。接受了你的回答。非常感谢
    猜你喜欢
    • 2018-05-15
    • 2010-12-02
    • 2022-08-18
    • 2019-08-05
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多