2017-08-28 8 views
0
search_api(session, search_obj, entity): 
query = '' 
count = 0 
print search_obj 
for entry in search_obj: 
    print entry 
    query += str(entry) + " = " + str(search_obj[entry]) 
    count += 1 
    if(count != len(search_obj)): 
     query += " , " 
obj_list = session.query(entity).filter_by(str(query)) 
print obj_list 
return (obj_list) 

私はdocumentationによると、次のエラーfilter_byが渡されたが、私は一つだけ

TypeError: filter_by() takes exactly 1 argument (2 given)

+0

あなたの元のクエリの試みはSQLインジェクションにさらされる可能性があります。 SQLAlchemyが提供する保護機能を明示的に無効にするには、who-know-whereの文字列を連結してSQLテキストを渡します。 –

答えて

1

を取得しています持って、filter_by**kwargs引数を取ります。例えば

:あなたは「と」でグループ化する複数の基準を持っている場合は

session.query(entity).filter_by(my_column = "value") 

、あなたがdictに保存し、このようにそれを使用することができます:

criteria = {'col1': 'value1', 'col2': 'value2'} 
session.query(entity).filter_by(**criteria) 

あなたの状況では、 "基準"は "search_obj"変数と同じです...

+0

今、私はobj_list = session.query(エンティティ).filter_by(** search_obj)を使用しています。これは今働いています。 – katrik

+0

@katrik:大丈夫ですが、 'all()'でクエリするのを忘れないでください: 'session.queryエンティティ).filter_by(** search_obj).all() ' –

+0

あなたはもっと説明が必要ですか?私はupvoteし、[受け入れる](https://meta.stackexchange.com/a/5235/344471)私の答えをお勧めします。 –

関連する問題