2017-03-01 4 views
1

사용자가 매개 변수로 열 이름을 전달하여 사용하고자하는 열을 기반으로 데이터베이스를 쿼리 할 수 ​​있도록 API를 만들려고합니다. 나는 사용자가 변수 "COL"를 입력 어떤하여 현재 열입니다 "Menu_type"를 대체하기 위해 노력하고사용자가 지정한 열을 검사하기 위해 select 쿼리를 작성하십시오.

@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]) 

어떤 도움을 주시면 감사하겠습니다.

답변

0

getattr 기능을 사용할 수 있습니다. 객체가 속성을 요청했지만 객체가 테이블 열 (예를 들어 메서드)이 아닌 경우를 방지하려면 - 테이블 열 컬렉션 :

@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])