2012-04-11 16 views
0

Ich benutze SQL Alchemy und ich möchte eine Liste der Dokument-IDs zurückgeben. Die IDs sind der Primärschlüssel in der Dokumententabelle. Meine aktuelle Abfrage gibt eine Liste von Tupeln zurück.SQL Alchemie Rückkehrliste von IDs

userDocs = session.query(Document.idDocument).filter(Document.User_idUser == user.idUser).all() 

Der Grund, warum ich eine Liste von IDs will, ist so, dass ich eine andere Tabelle mit in_ suchen (userDocs).

Eine andere Lösung wäre also, mit Tupeln suchen zu können. Ich gebe gerade nichts von meiner zweiten Abfrage mit userDocs zurück.

Vielen Dank !!

Antwort

2

Sie müssen keine Zwischenabfrage durchführen, Sie können dies alles auf einmal tun!

things = session.query(Things) \ 
       .join(Thing.documents) \ 
       .filter(Document.User_idUser==user.idUser) 

Sie Abfrage nur auf den Eigenschaften des Dokuments durch seine relationship() von der beabsichtigten Einheit.

+0

Ich stimme @TokenMacGuy zu: Sie sollten einfach Ihre (zweite) Abfrage erweitern, indem Sie der Tabelle 'Document' einen' Join' hinzufügen und diesen 'Filter' hinzufügen. Auf diese Weise erhalten Sie Ihre Ergebnisse in einer Abfrage (eine "SQL" -Anweisung). Selbst wenn Sie keine 'Beziehung' zwischen' Thing' und 'Document' haben, können Sie immer noch mit expliziter Bedingung" beitreten ". Ganz zu schweigen davon, dass der 'IN'-Operator im Allgemeinen suboptimal sein könnte (http://stackoverflow.com/questions/1013797/is-sql-in-bad-for-performance) – van

+0

Vielen Dank. Perfekt, dachte nicht daran, seine Beziehungen zu filtern. Ich habe versucht, etwas mit verschachtelten Abfragen zu experimentieren, die nicht gut abschnitten, aber das scheint der beste Weg zu sein. Vielen Dank! –

+0

Ich denke, Sie meinen Abfrage (Things) .join (Thing.documents) .filter (Document.User_idUser == user.idUser), Sie können nicht direkt aus Thing.documents in die nächste Entität navigieren (SQLA wird nicht implizit beitreten) – zzzeek

Verwandte Themen