Использование db.execute в postgresql с использованием оператора LIKE с переменными в flask, информация не передается - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь заставить мой db.execute работать, удалось разрешить синтаксическую ошибку при использовании оператора LIKE вместе с переменной, переданной из HTML, но все равно не работает дай мне результаты. (был закрыт администратором, поэтому повторная публикация)

Использовал flask консоль для печати и выяснения, были ли какие-либо значения переданы вообще, и это не так. найдена переменная, не возвращающая ничего из функции dbExecute

Почему мои результаты не передаются из db.execute?

Мой код извлечен ниже:

@app.route("/search", methods=["POST"])
def search():
    """Search for books"""

    # best example, but no data passed:
    found = db.execute("SELECT * FROM books_table WHERE (isbn LIKE :lookingFor) OR (title LIKE :lookingFor) OR (title LIKE :lookingFor) OR (year::text LIKE :lookingFor)", {"lookingFor": f"%{searchBookVariableOnApplication_py}%"}).fetchall();

    return render_template("search.html", found=found)

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Вы используете f-строку в попытке использовать переменную searchBookVariableOnApplication_py, но не интерполируете ее в пределах f-строки.

This:

{"lookingFor": f"\"%searchBookVariableOnApplication_py%\""}

будь таким:

{"lookingFor": f"\"%{searchBookVariableOnApplication_py}%\""}
0 голосов
/ 29 марта 2020

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

import psycopg2

searchBook = request.form['searchBook']
sql = """SELECT *
         FROM books_table
         WHERE isbn LIKE %s OR title LIKE %s OR year::text LIKE %s"""
param = "%" + searchBook + "%"
found = db.execute(sql, (searchBook, searchBook, searchBook,))
...