Python 使用2个选择条件编写查询的更好方法
我正在编写一个web应用程序,其中数据库查询来自两个选择框,一个是关于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
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
子句