我正在尝试创建一个API,允许用户根据他们希望使用的列来查询数据库,方法是将列名称作为参数传递。
@app.route('/api/restaurants/search1/',methods=['GET'])
def search():
col = request.args['col']
key = request.args['key']
restaurant = Restaurant.query.filter(Restaurant.menu_type.like("%"+key+"%")).all()
return jsonify(json_list=[i.serialize for i in restaurant])
我正在尝试将“Menu_type”替换为当前列,无论用户为变量“col”输入什么,任何帮助都将受到赞赏。
答案 0 :(得分:0)
您可以使用getattr功能。为了避免对象请求属性但不是表列(例如方法)的情况,请检查Restaurant.__table__.c
- 表列的集合:
@app.route('/api/restaurants/search1/',methods=['GET'])
def search():
col = request.args['col']
key = request.args['key']
if col in Restaurant.__table__.c:
restaurant = Restaurant.query.filter(getattr(Restaurant, col).like("%"+key+"%")).all()
else:
raise RuntimeError('Restaurant table doesn`t have column %s' % col)
return jsonify(json_list=[i.serialize for i in restaurant])