Python 复杂注释&;聚合查询
我有一个OrderItem对象的查询集。它们的形式如下:Python 复杂注释&;聚合查询,python,sql,django,Python,Sql,Django,我有一个OrderItem对象的查询集。它们的形式如下: OrderItem - ID - BillingParty - Rate 我想按QuerySet聚合/分组,这样它就可以按最高的组合速率排序,并注释速率和计数。这是一个例子 一, 至高无上的 五百 二, WB 三百 三, 至高无上的 四百 由此,我希望能够: [ {'BillingParty': 'Paramount', 'TotalRate': 900, 'ItemCount': 2}, {'Bill
OrderItem
- ID
- BillingParty
- Rate
我想按QuerySet聚合/分组,这样它就可以按最高的组合速率排序,并注释速率和计数。这是一个例子
- 一,
- 至高无上的
- 五百
- 二,
- WB
- 三百
- 三,
- 至高无上的
- 四百
由此,我希望能够:
[
{'BillingParty': 'Paramount', 'TotalRate': 900, 'ItemCount': 2},
{'BillingParty': 'WB', 'TotalRate': 300, 'ItemCount': 1},
]
我该怎么做?我在想可能是这样的:
order_items.aggregate('billing_party')
.annotate(ItemCount=Count('id'), TotalRate=Sum('rate')
或者,对于django来说太复杂了吗?我需要在这里做一个python for循环来添加内容。[p>[update]
我想说的是,你的问题似乎是个骗局:明白吗
所以最后这不是很复杂
当您开始意识到Django中的ORM层被优化为易于使用而不是灵活性时,您就有了一个非常复杂的查询,您必须求助于原始SQL来执行一些复杂的查询
当我感到懒惰时,我只使用,不使用时,我加入一些混合-这种ORM几乎1:1映射到原始SQL,但与使用字符串组合的原始SQL相比,更易于重用/重构
当我需要从服务器中提取每一点性能时,我只要求DBA使用我需要的结果创建一个视图,并使用
Meta.db\u table='view\u name'
(使用任何唯一的列作为索引,或使用一个伪索引,如随机uuid4)。这实际上比我想象的要简单一些。通过执行.values()
然后执行.annotate
(),我可以按进行分组
order_items = order_items.values('billing_party')
.annotate(total_rate=Sum('rate'), count=Count('id'))
.order_by('-total_rate')
以下是有关执行.values()
然后执行annotate()
以处理上述问题的文档: