2016-09-23 9 views
1

データベースクエリが2つの選択ボックスから来て、1つが約sexで、もう1つが約class_typeであるWebアプリケーションを作成しています。私のコードでは、私は次の形式2つの選択基準を使用してクエリを書くより良い方法

q = User.query.with_entities(*(getattr(User, col) for col in cols))  

そして

if sex=='all' and class_type=='all': 
    rows = q.all() 
elif sex=='all' and class_type!='all': 
    rows = q.filter_by(class_type=class_type) 
elif sex!='all' and class_type=='all': 
    rows = q.filter_by(sex=sex) 
else: 
    rows = q.filter_by(sex=sex, class_type=class_type) 

ありますが、次のようにallなるように選択されsexかとclass_typeに応じて、私はケースを壊していベースのクエリを持っていますこのロジックを書く良い方法は?

答えて

1

あなたはこれを行うことができます:

filters = {} 
if sex != 'all': 
    filters['sex'] = sex 
if class_type != 'all': 
    filters['class_type'] = class_type 
rows = q.filter_by(**filters) 

あなたが唯一の属性ごとにひとつの条件が必要になり、そしてfiltersのための空の辞書には無いWHERE句を持つクエリになります。

関連する問題