2012-04-11 4 views
0

私はSQL Alchemyを使用していますが、Document Idのリストを返したいと思います。 IDは、文書表の主キーです。私の現在のクエリは、タプルのリストを返します。私は(userDocs)IN_使用して別のテーブルを検索することができるようにSQL Alchemyがidsのリストを返す

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

私はIDのリストをしたい理由があります。

もう1つの解決策は、タプルを使用して検索できることです。私は現在、userDocsを使って2番目のクエリから何も返さない。

ありがとうございました!

答えて

2

中間クエリを実行する必要はありません。すべてをワンショットで実行できます。

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

目的のエンティティのrelationship()を通じて、ドキュメントのプロパティを照会するだけです。

+0

@TokenMacGuyに同意します: 'Document'テーブルに' join'を追加し、 'filter'を追加するだけで(2番目の)クエリを拡張する必要があります。このようにして、1つのクエリ(1つの 'SQL'文)で結果が得られます。 'Thing'と' Document'の間に ''関係がない場合でも、明示的な条件で ''結合 ''できます。 「IN」演算子が一般的に準最適ではないことは言うまでもありません(http://stackoverflow.com/questions/1013797/is-sql-in-bad-for-formformance) – van

+0

ありがとうございます。パーフェクト、それをフィルタリングするためにその関係を使用することを考えていなかった。私はうまくいきませんでしたネストされたクエリでいくつかの実験を試みていたが、これは最善の方法と思われる。ありがとう! –

+0

あなたはquery(Things).join(Thing.documents).filter(Document.User_idUser == user.idUser)を意味すると思うので、Thing.documentsから直接次のエンティティにナビゲートすることはできません(SQLAは暗黙的に参加しません) – zzzeek

関連する問題