Python 动态过滤器与startswith操作员在烧瓶中SQLAlchemy

Python 动态过滤器与startswith操作员在烧瓶中SQLAlchemy,python,python-3.x,sqlalchemy,flask-sqlalchemy,Python,Python 3.x,Sqlalchemy,Flask Sqlalchemy,我对动态提供的列和相应的值进行了筛选查询 from flask import request filter_dict = {} page = request.args.get('index', 1, type=int) no_of_item = request.args.get('max', 10, type=int) if request.args.get('first_name', type=int): filter_dict['first_name'] = request.a

我对动态提供的列和相应的值进行了筛选查询

from flask import request
filter_dict = {}
page = request.args.get('index', 1, type=int)
no_of_item = request.args.get('max', 10, type=int)
if request.args.get('first_name', type=int):
       filter_dict['first_name'] = request.args.get('first_name', type=str)
if request.args.get('city', type=int):
       filter_dict['city'] = request.args.get('city', type=str)
# Query
list_user_obj = User.query.filter_by(**filter_dict).paginate(page=page, per_page=no_of_item)

现在我想查询所有以“jh”和“NY”开头的名字。如何以更高效的方式构建查询?无论如何,有没有这样的说法:过滤名字时,只以“jh”模式开始查找。

我尝试了类似的方法。使用过滤器代替过滤器。它对我有用

from flask import request
filter_list= []
page = request.args.get('index', 1, type=int)
no_of_item = request.args.get('max', 10, type=int)
if request.args.get('first_name', type=int):
       filter_list.append(User.first_name.startswith(request.args.get('first_name', type=str))
if request.args.get('city', type=int):
       filter_list.append(User.city == request.args.get('city', type=str))
# Query
list_user_obj = User.query.filter(*filter_list).paginate(page=page, per_page=no_of_item)

request.args.get'first_name',type=int:我不是数字,我是自由人!您是否检查过:更严重的是,filter_by只能生成简单的相等比较。如果您需要更复杂的条件,您必须使用filter。@IljaEverilä,同意我们可以使用filter_by而不是filter_by,但这里我想创建一个查询,使用此条件User.first_name.startswith'jh'和city='NY'执行筛选。使用两者,链接将添加的条件与和结合起来。