如何通过密钥共同组合多个查询集?

时间:2016-05-11 11:58:50

标签: python django performance postgresql django-queryset

我有几个必须有效组合的查询集。所有查询集都有公共字段key,我希望通过其值查询结果进行连接。 E.g:

some_query = SomeObject.objects.values('key').annotate(sum_0=Sum('some_value_field'))
other_query = OtherObject.objects.values('key', 'other_field').annotate(sum_1=Sum('some_other_value_field'))

我有什么:

[{'key': 1, 'sum_0': 10}, {'key': 2, 'sum_0': 20}, ...]
[{'key': 1, 'sum_1': 1000}, {'key': 2, 'sum_1': 200}, ...]

我想要的是什么:

[{'key': 1, 'sum_0': 10, 'sum_1': 100}, {'key': 2, 'sum_0': 20, 'sum_1': 200}, ...]

我正在使用这种方法来组合dicts:

d = defaultdict(dict)
for item in [some_query, other_query]:
    for elem in item:
        d[elem['key']].update(elem)
combined = d.values()

通过遍历每个查询集,是否有更有效的方法来实现除字典合并之外的其他方法,或者有可能通过key将这些查询集合并到查询本身的一个结果中?

2 个答案:

答案 0 :(得分:0)

您可以组合注释以仅执行一次数据库操作:

gsm.mygdx.androidStuff.startActivity()

答案 1 :(得分:0)

itertools.chain是我的首选方式,但注释可以正常工作。