Передайте три параметра в MySQL, используя Flask REST API - PullRequest
0 голосов
/ 16 сентября 2018

Мне нужно построить маршрут во фляге, используя python, который позволял бы передавать 3 параметра через URI, чтобы я мог использовать 3 параметра в запросе MySQL.

Таблица базы данных имеет каждый из 3 параметров в 3 столбцах, и запрос конечного результата будет выглядеть примерно так:

Select * from maintable where (field1= param1 and field2 = param2 and field3 = param3);

Я бы хотел, чтобы URI выглядел следующим образом: http://my.api.com/search/123/345/DD5432

Код Python выглядит следующим образом

@app.route('/search/param1/param2/param3')
def get():
cur = mysql.connect().cursor()
cur.execute('''select * from maindb.maintable''')
r = [dict((cur.description[i][0], value)
          for i, value in enumerate(row)) for row in cur.fetchall()]
return jsonify({'results' : r})

Мне удалось успешно передать 1 параметр и использовать его для запроса 1 столбца в моей базе данных.

1 Ответ

0 голосов
/ 16 сентября 2018

Прежде всего вам нужно изменить правило маршрута , чтобы иметь возможность извлечь его части.И тогда вам нужно отправить эти параметры в запросе SQL.Однако не создавайте SQL-запрос непосредственно из пользовательского ввода, так как это может привести к уязвимости SQL-инъекций.Используйте заполнители , а затем отправьте свои параметры в виде кортежа в курсор БД execute():

@app.route('/search/<param1>/<param2>/<param3>')
def get(param1, param2, param3):
    cur = mysql.connect().cursor()
    cur.execute('''select * from maindb.maintable where field1 = %s and field2 = %s and field3 = %s''', 
                (param1, param2, param3))
    r = [dict((cur.description[i][0], value)
         for i, value in enumerate(row)) for row in cur.fetchall()]
    return jsonify({'results': r})
...