2016-08-28 9 views
0

33kレコード(ムービー)の大きなsqliteテーブルがあります。私は、ユーザーがフィルタを介してそのテーブルを検索できるようにしたいと考えています。各ムービーレコードには、アクター、ディレクター、ランタイム、ジャンル、レーティングなど10項目があります。ユーザーが使用できるフィルタは、人物(俳優と監督を含む)、ジャンル、評価、ランタイムだけです。動的SQLクエリを作成する方法

問題は、ユーザーが2つ以上のフィルタを使用できることです。そのため、使用するフィルタは実際にはわかりません。フィルタの値は、HTTP reqを介して処理されるサーバに渡され、dbで実行されるフィルタに基づいてSQLクエリが作成されます。

私は理解できないことは、どのフィルタを使用するのかわからない場合はどうすればSQLクエリを作成できますか?使用済みのフィルタのみがサーバーに送信されるためです。

基本的には、各ユーザーが送信したフィルタに基づいてSQLクエリを作成する方法を見つけたいと思います。あなただけ何度もQuery.filter_by()またはQuery.filter()を適用することができますが、フィルタのリストを与えられている場合は

答えて

2

、:クエリが最後でのみ評価されているので

filters = [ 
    ('rating', 3), 
    ('runtime', 90), 
    ('genre', 'documentary') 
] 

query = session.query(Movie) 

for column, value in filters: 
    # Make sure `column` and `value` are legal values! 

    query = query.filter_by(**{column: value}) 

、あなたは基本的にやっている:

query = query.filter_by(...).filter_by(...) ... 

最後の行で、filter_by(**{column: value})filter_by(value_of_column_variable=value)の表記です。

関連する問題