按照this question中的示例,我有一个基于查询字符串参数过滤数据的flask
视图:
@app.route('/regs')
def regs_data():
#check what data is available
#REGS is a sqlalchemy model
cols = REGS.__table__.columns.keys()
kwargs = {}
for k, v in request.args.lists():
if k not in cols:
abort(400, "helpful err msg")
#takes only first occurrence
kwargs[k]=v[0]
my_query = REGS.query.filter_by(**kwargs).all()
#....modify the query data for return
return the_data_as_json
这适用于request.args
中每个键只出现1次的情况。如何扩展它以应对每个关键字的多个值?例如/regs?foo=1&foo=2
有没有办法同时应用filter_by
和in_()
由于
答案 0 :(得分:0)
我能提出的最佳解决方案是迭代每个参数并将过滤器链接在一起。
不是很整洁但是有效。
def regs_data():
#get allowed data names
cols = REGS.__table__.columns.keys()
#make base query object
my_query = REGS.query
for k, v in request.args.lists():
if k not in cols:
abort(400, "helpful err msg")
#chain together filters for each arg
my_query = my_query.filter(getattr(REGS, k).in_(tuple(v)))
#fire the query
data = my_query.all()
#....modify the query data for return
return the_data_as_json