Ich habe Schwierigkeiten, meine SQLAlchemy-Abfragen zu optimieren. Mein SQL-Wissen ist sehr einfach und ich kann einfach nicht die Sachen bekommen, die ich von den SQLAlchemy-Dokumenten benötige.
Nehmen Sie die folgende sehr grundlegende Eins-zu-Viele-Beziehung an:
%Vor%Wie könnte ich:
(Parent, count_of_naughty_children, count_of_all_children)
für jedes Elternteil abfragen? Nach einer anständigen Zeit beim Googlen habe ich herausgefunden, wie man diese Werte separat abfragt:
%Vor%Ich habe versucht, sie auf verschiedene Arten zu kombinieren, aber ich habe es nicht geschafft, das zu bekommen, was ich will.
Ich nehme an, dass diese Abfrage auf der vorherigen basieren wird, die nach dem Verhältnis Naughty / All gefiltert wird.
Jede Hilfe ist willkommen.
BEARBEITEN: Dank Antti Haapalas Hilfe fand ich eine Lösung für die zweite Frage:
%Vor% Es findet einen Durchschnittswert für die Variable naughty
von Kindern, behandelt False und NULLs als 0 und True als 1. Getestet mit dem MySQL-Backend, sollte aber auch für andere funktionieren.
Die Funktion count()
sql aggregate ist ziemlich einfach; Es gibt Ihnen die Gesamtzahl der Nicht-Null-Werte in jeder Gruppe. In diesem Sinne können wir Ihre Anfrage so anpassen, dass Sie das richtige Ergebnis erhalten.
Was die folgende sql erzeugt:
%Vor% Wenn Ihre Abfrage nur die Eltern mit & gt; 80% Kinder ungezogen, können Sie auf den meisten Datenbanken die naughty
auf Integer werfen, dann nehmen Sie den Durchschnitt davon; dann having
dieser Durchschnitt größer als 0.8
.
Sie erhalten also etwas wie
%Vor%Tags und Links python sql sqlalchemy orm querying