我正在使用用户表单输入查询数据库模型。我的相关HTML表单输入语法如下:
<label>Make</label>
<select name="Car_Make" id="Car_Make_Selector" class="form-control">
<option value="" >Any</option>
<option value="Toyota">Toyota</option>
sqlAlchemy查询如下:
Searched_Cars = Cars.query.filter_by(Car_Make=request.args.get('Car_Make')).order_by(Cars.Date_Created.desc())
现在,当我在表格中为Car_Make =“Toyota”选择一个值时,查询工作正常。但是当我在表单中选择“Any”选项时,查询结果为空。
我想要的是,当用户选择“任意”时,查询将返回db中的所有汽车。如果选择“Any”,那么本质上是从查询中删除filter_by子句。
此外,鉴于我有7个标准来搜索颜色,模型和年份等,并且用户可以选择这些标准中的任何一个或多个作为“任何”。那么,以下查询语法是否适用于多个搜索条件?
Searched_Cars = Cars.query.filter_by(Car_Make=request.args.get('Car_Make'),Car_Model=request.args.get('Car_Model'),Car_Colour=request.args.get('Car_Colour')).order_by(Cars.Date_Created.desc())
问候。
答案 0 :(得分:0)
您可以通过传递给filter_by函数的关键字参数来实现此目的 您只需要将这些值添加到关键字参数中,这些参数的值不是“任何”
下面是示例代码,您可以实现它 - 当用户选择“Any”时,查询将返回db中的所有汽车
filter_arguments = {}
if request.args.get('Car_Make'):
filter_arguments.update(Car_Make=request.args.get('Car_Make'))
Searched_Cars = Cars.query.filter_by(**filter_arguments).order_by(Cars.Date_Created.desc())
所以上面的代码只会添加那些有值的过滤条件
同样可以用于其他过滤条件
但请注意,要处理所有过滤条件,您需要运行查询而不使用filter_by,如下所示
filter_arguments = {}
if request.args.get('Car_Make'):
filter_arguments.update(Car_Make=request.args.get('Car_Make'))
if filter_arguments:
Searched_Cars = Cars.query.filter_by(**filter_arguments).order_by(Cars.Date_Created.desc())
else:
Searched_Cars = Cars.query.order_by(Cars.Date_Created.desc())