2011-09-30 31 views
25

ウェブページからdictが渡されました。私はdictに基づいてクエリを動的に構築したい。私は私ができることを知っています:SQLAlchemy - dictから動的にクエリフィルタを構築する

session.query(myClass).filter_by(**web_dict) 

しかし、値が完全に一致する場合にのみ動作します。私はフィルタリングのようにする必要があります。 __dict__属性を使用して、私の最高の試み:

for k,v in web_dict.items(): 
    q = session.query(myClass).filter(myClass.__dict__[k].like('%%%s%%' % v)) 

そこからクエリを作成する方法がわかりません。どんな助けも素晴らしいだろう。

答えて

38

あなたは正しい軌道に乗っています!

最初に行うことは、ではなくgetattrを使用するアクセス属性です。 getattrは、(畳み込みモデルの場合のように)マッピングされた属性が列プロパティではない場合でも、常に正しいことを行います。

もう1つ欠けている部分は、filter()を複数回指定でき、古いクエリオブジェクトをそのメソッド呼び出しの結果で置き換えることができることです。基本的に:

q = session.query(myClass) 
for attr, value in web_dict.items(): 
    q = q.filter(getattr(myClass, attr).like("%%%s%%" % value)) 
+2

TokenMacGuyが再び襲います。音楽をキューに入れて... – MFB

+1

笑、私を取り戻す... :) – MFB

+3

コメント欄にスパムを入れないでください! – PersianGulf

関連する問題