我正在编写一个Web应用程序,其中数据库查询来自两个选择框,一个是sex
,另一个是class_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)
有没有更好的方法来编写这个逻辑?
答案 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
子句。