使用LIKE运算符在烧瓶中使用LIKE运算符在PostgreSQL中使用db.execute,未传递任何信息

时间:2020-03-29 05:32:10

标签: python postgresql sqlalchemy syntax-error flask-sqlalchemy

我正在尝试使db.execute正常工作,并在使用LIKE运算符以及从HTML传入的变量时将其管理为resolve the syntax error,但是它仍然没有给我结果。 (被管理员关闭了,所以要重新发布)

使用烧瓶控制台打印并找出是否有任何值传递,但没有。 found variable not returning anything from dbExecute function

为什么我的结果没有从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 :(得分:0)

这里的问题是您没有将通配符字符串文字正确绑定到查询字符串。您应该在此处使用准备好的语句。假设您正在使用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,))

答案 1 :(得分:0)

您正在使用f字符串来尝试使用变量searchBookVariableOnApplication_py,但不将其插入f字符串中。

此:

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

应该是这样

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