使用2个选择标准编写查询的更好方法

时间:2016-09-23 20:32:23

标签: python sql sqlalchemy flask-sqlalchemy

我正在编写一个Web应用程序,其中数据库查询来自两个选择框,一个是sex,另一个是class_type。在我的代码中,我有一个基本查询,其格式如下

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

根据sexclass_type是否被选为all,我将案例分解如下

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)

有没有更好的方法来编写这个逻辑?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

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

每个属性只需要一个条件,filters的空字典会导致查询没有WHERE子句。