python - 如何在 Django 中查询为 GROUP BY?

标签 python django django-models

我查询一个模型:

Members.objects.all()

然后它返回:

Eric, Salesman, X-Shop
Freddie, Manager, X2-Shop
Teddy, Salesman, X2-Shop
Sean, Manager, X2-Shop

我想知道最好的 Django 开火方式 group_by 查询我的数据库,例如:

Members.objects.all().group_by('designation')

这当然行不通。 我知道我们可以在 django/db/models/query.py 上做一些技巧,但我只是想知道如何在不打补丁的情况下做到这一点。

最佳答案

如果您要进行聚合,您可以使用 aggregation features of the ORM :

from django.db.models import Count
result = (Members.objects
    .values('designation')
    .annotate(dcount=Count('designation'))
    .order_by()
)

这会产生类似于

的查询
SELECT designation, COUNT(designation) AS dcount
FROM members GROUP BY designation

输出格式为

[{'designation': 'Salesman', 'dcount': 2}, 
 {'designation': 'Manager', 'dcount': 2}]

如果您不包含 order_by(),如果默认排序不是您所期望的,您可能会得到不正确的结果。

如果要在结果中包含多个字段,只需将它们作为参数添加到 values,例如:

    .values('designation', 'first_name', 'last_name')

引用资料:

关于python - 如何在 Django 中查询为 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/629551/

相关文章:

python - 如果下一步不存在,则尝试隐藏按钮

python - 格式错误的 CSV 文件和 Pandas read_csv by chunk

python - FacetGrid 轴跨行共享 x 轴/跨列共享 y 轴

python - 在 Flask 中注册用户时 session 不可用

python - "conversion from method to Decimal is not supported django"错误

python - 在 Django 中获取反序列化对象的主键

python - Spyder 5.0.1 加载失败

python - Django 是否提供任何内置方式来更新 PostgreSQL 自动增量计数器?

python - 小写字段值 django 模型查询集

python - 在 Django 脆皮表单 form_action 中使用 pk 参数