фляга postgres динамическая строка запроса с переменной - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь динамически запрашивать таблицу PostgresSQL с переменной. Например, когда пользователь вводит name, я хочу, чтобы пользователь был перенаправлен на страницу, на которой отображаются данные таблицы, связанные с этим name (строки из таблицы базы данных, которые имеют этот name в определенном столбце) , Я знаю, что правильно подключен к базе данных PostgresSQL.

В моем файле Flask app.py у меня есть:

@app.route("/test")
def hello():
    html = render_template('test_index.html')
    return html

@app.route("/results")
def goodbye():
    x =  request.args.get('stuff')
    image=sql("SELECT * FROM image WHERE image_id = '%s'" % ({x}))
    html = render_template('test_results.html', target=x, image=image)

    return html

В моем test_index.html шаблоне у меня есть:

<h1>Hello</h1>
<form action="{{url_for('goodbye')}}" method="get">
  <input type="text" name="stuff" value="type something!">
  <input type="submit" value="Submit">
</form>

В моем test_results.html шаблоне у меня есть:

 <h1>Image ID:</h1>
 <h2>{{target}}</h2>

<table>
  <tr>
    <th>Image ID</th>
{% for images in image %}
  <tr>
    <td>{{ images.image_id }}</td>
  </tr>

{% endfor %}

Когда я ввожу имя, я получаю эту ошибку:

ProgrammingError: синтаксическая ошибка (psycopg2.ProgrammingError) в «или около» Джона ЛИНИЯ 1: ВЫБРАТЬ * ИЗ ИЗОБРАЖЕНИЯ, ГДЕ image_id = 'set ([u'John' ...

Есть ли способ сделать этот метод динамического запроса по строке возможным? Или я некорректно подхожу к этой проблеме? (Должен ли я объявить модель и подойти к ней таким образом?)

1 Ответ

0 голосов
/ 06 июля 2018

Из документации: http://docs.sqlalchemy.org/en/latest/orm/session_api.html

Ваш подход точен, есть только небольшая проблема в выражении sql в вашем приложении фляги. Попробуйте вместо этого:

@app.route("/test")
def hello():
    html = render_template('test_index.html')
    return html

@app.route("/results")
def goodbye():
    x =  request.args.get('stuff')
    image = sql("SELECT * FROM image WHERE image_id=:image_id_input;", 
        {"image_id_input": x})
    html = render_template('test_results.html', target=x, image=image)

    return html

Я также предполагаю, что вы захотите обновить оператор SQL-запроса, чтобы выбрать только те поля изображения, которые вы хотите отобразить. В настоящее время изображение будет списком списков, причем каждый внутренний список является столбцами соответствующей строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...