Ich habe mehrere Abfragesätze, die effektiv kombiniert werden müssen. Alle Abfragesätze haben das gemeinsame Feld key
und ich möchte die Abfrageergebnisse durch den Wert verketten. ZB:Wie mehrere Abfragegruppen nach Schlüssel gemeinsam zu kombinieren?
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'))
Was ich habe:
[{'key': 1, 'sum_0': 10}, {'key': 2, 'sum_0': 20}, ...]
[{'key': 1, 'sum_1': 1000}, {'key': 2, 'sum_1': 200}, ...]
Was ich will:
[{'key': 1, 'sum_0': 10, 'sum_1': 100}, {'key': 2, 'sum_0': 20, 'sum_1': 200}, ...]
ich diese Methode bin mit dicts kombinieren:
d = defaultdict(dict)
for item in [some_query, other_query]:
for elem in item:
d[elem['key']].update(elem)
combined = d.values()
Gibt es mehr effektiver Weg, um das andere als Wörterbuch mich zu erreichen rge durch Iterieren durch jedes Abfrage-Set oder vielleicht gibt es eine Möglichkeit, diese Abfrage-Sets von key
zu einem Ergebnis in der Abfrage selbst zu kombinieren?
AFAIK Sie können Daten aus verschiedenen Tabellen nicht mit Django ORM/pure SQL kombinieren. –
@MaximeLorant danke für die Antwort, wusste das nicht. – Dambre