Python 使用2个选择条件编写查询的更好方法

Python 使用2个选择条件编写查询的更好方法,python,sql,sqlalchemy,flask-sqlalchemy,Python,Sql,Sqlalchemy,Flask Sqlalchemy,我正在编写一个web应用程序,其中数据库查询来自两个选择框,一个是关于sex,另一个是关于class\u type。在我的代码中,我有一个基本查询,其形式如下 q = User.query.with_entities(*(getattr(User, col) for col in cols)) 根据sex和class_type是否被选为all,我将这些情况分解如下 if sex=='all' and class_type=='all': rows = q.all() elif

我正在编写一个web应用程序,其中数据库查询来自两个选择框,一个是关于
sex
,另一个是关于
class\u type
。在我的代码中,我有一个基本查询,其形式如下

q = User.query.with_entities(*(getattr(User, col) for col in cols))    
根据
sex
class_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)
是否有更好的方法编写此逻辑?

您可以这样做:

filters = {}
if sex != 'all':
    filters['sex'] = sex
if class_type != 'all':
    filters['class_type'] = class_type
rows = q.filter_by(**filters)
每个属性只需要一个条件,
filters
的空字典将导致查询中没有
WHERE
子句