构建一个select查询以便用户扫描指定的列

时间:2017-03-01 22:45:28

标签: python flask sqlalchemy flask-sqlalchemy

我正在尝试创建一个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”输入什么,任何帮助都将受到赞赏。

1 个答案:

答案 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])