我正在尝试使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)
答案 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}%\""}