SQLAlchemy ORM: Ändere die von einer Abfrage zurückgegebenen Spalten

8

Wenn ich eine SQLAlchemy-ORM-Abfrage habe:

%Vor%

Ist es möglich, die von dieser Abfrage zurückgegebenen Spalten zu ändern?

Zum Beispiel, damit ich nur die Spalte User.id auswählen und diese in einer Unterabfrage verwenden kann:

%Vor%

Hinweis: Die .values() -Methode funktioniert nicht, da sie die Abfrage ausführt und eine iterierbare Ergebnismenge zurückgibt (also führt z. B. EmailAddress.user_id.in_(admin_users.values(User.id)) zwei Abfragen aus, nicht eine).

Ich weiß, dass ich die erste Abfrage als Session.query(User.id) ändern könnte, aber ich frage mich genau, wie ich die von einer Abfrage zurückgegebenen Spalten ändern könnte.

    
David Wolever 20.05.2012, 21:49
quelle

2 Antworten

16

Ich fühle deinen Schmerz auf der values() Sache. In 0.6.5 habe ich with_entities() hinzugefügt, was genau wie values() ist, außer iterate nicht:

%Vor%     
zzzeek 21.05.2012, 13:44
quelle
1

Unter der Annahme, dass Ihre Address.user_id eine ForeignKey definiert, wird die folgende Abfrage die Aufgabe effizienter ausführen als IN operator:

%Vor%

Wenn Sie keinen ForeignKey haben (obwohl Sie sollten), können Sie die join Bedingung explizit angeben:

%Vor%

Aber wenn du es wirklich mit in_ operator machen möchtest, hier gehts (beachte subquery ):

%Vor%     
van 21.05.2012 06:57
quelle

Tags und Links