2024-03-29 14:43:04 发布
网友
我知道Django 1.1有一些新的聚合方法。但是,我无法找到与以下查询等效的查询:
SELECT player_type, COUNT(*) FROM players GROUP BY player_type;
Django1.1的模型查询API是否可以,或者我应该只使用普通的SQL?
如果您使用的是Django 1.1 beta(trunk):
Player.objects.values('player_type').order_by().annotate(Count('player_type'))
values('player_type')
player_type
GROUP BY
order_by()
SELECT
Django 1.1确实支持像count这样的聚合方法。你可以找到the full documentation here。
要回答您的问题,您可以使用以下内容:
from django.db.models import Count q = Player.objects.annotate(Count('games')) print q[0] print q[0].games__count
这将需要根据您的实际模型稍加调整。
编辑:以上代码片段基于每个对象生成聚合。如果希望在模型中的特定字段上进行聚合,可以使用values方法:
values
from django.db.models import Count q = Player.objects.values('playertype').annotate(Count('games')).order_by() print q[0] print q[0].games__count
需要order_by(),因为即使未显式传递给values(),也会自动选择默认顺序中的字段。此对order_by()的调用清除任何排序,并使查询按预期行为。
values()
此外,如果要计算用于分组的字段(相当于COUNT(*)),可以使用:
COUNT(*)
from django.db.models import Count q = Player.objects.values('playertype').annotate(Count('playertype')).order_by() print q[0] print q[0].playertype__count
如果您使用的是Django 1.1 beta(trunk):
values('player_type')
-仅用于将player_type
字段包含到GROUP BY
子句中。order_by()
-排除可能导致不需要的字段包含在SELECT
和GROUP BY
中的默认顺序。Django 1.1确实支持像count这样的聚合方法。你可以找到the full documentation here。
要回答您的问题,您可以使用以下内容:
这将需要根据您的实际模型稍加调整。
编辑:以上代码片段基于每个对象生成聚合。如果希望在模型中的特定字段上进行聚合,可以使用
values
方法:需要
order_by()
,因为即使未显式传递给values()
,也会自动选择默认顺序中的字段。此对order_by()
的调用清除任何排序,并使查询按预期行为。此外,如果要计算用于分组的字段(相当于
COUNT(*)
),可以使用:相关问题 更多 >
编程相关推荐