我有几个必须有效组合的查询集。所有查询集都有公共(public)字段 key
,我想按其值查询结果连接起来。例如:
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}, ...]
我正在使用这种方法来组合字典:
d = defaultdict(dict)
for item in [some_query, other_query]:
for elem in item:
d[elem['key']].update(elem)
combined = d.values()
除了通过遍历每个查询集的字典合并之外,是否有更有效的方法来完成此操作,或者是否有一种方法可以通过 key
将这些查询集组合成查询本身的一个结果?
最佳答案
您可以组合注释以仅执行一个数据库操作:
SomeObject.objects.values('key', 'other_field').annotate(sum_0=Sum('some_value_field'), sum_1=Sum('some_other_field'))
关于python - 如何通过按键组合多个查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37162009/