繁体   English   中英

如何使用Django ORM改善此查询?

[英]How can I improve this query with Django ORM?

我有一个以namecity为属性的Person模型。 我需要一种按城市检索人数的方法。 我需要类似以下字典的输出: {"NY": 23, "CA": 30, ...}

我所做的是:

response = {}
for city in ["NY", "CA", ...]:
    response[city] = Person.objects.filter(city=city).count()

在这里,我必须提供一个包含城市的预定义列表,然后对它们进行迭代。 是否有任何直接使用Django ORM并避免循环的方法?

这会做

response = dict(Person.objects.values('city').\
                       annotate(count=Count('city')).\
                       values_list('city', 'count'))

更新

正如OP正确指出的那样,您可以省略.values('city')

response = dict(Person.objects.annotate(count=Count('city')).\
                       values_list('city', 'count'))

因此,为了解决此问题,我基本上回到了准系统SQL。 您想要这样的东西:

SELECT city, count(*) FROM person
WHERE city in (...)
GROUP BY 1

然后尝试搜索,如何在django ORM中创建聚合参数:

from django.db.models import Count
Person.objects.filter(city__in=cities).annotate(count=Count('city'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM