我在尝试在我的网络应用程序上安装搜索功能时遇到问题。问题在于以下代码。我已经尝试了以下两个查询,但是python给了我一个错误,我将在下面列出:
def searchBox(user_id, searchparams):
try:
cursor = connection.cursor()
if cursor:
sql = "SELECT * FROM db_email WHERE user_id = %d AND deleted = 0 AND subject LIKE '%%%s%%';"
cursor.execute(sql % (user_id, searchparams)
我也尝试过:
try:
cursor = connection.cursor()
if cursor:
sql = "SELECT * FROM db_email WHERE user_id = %d AND deleted = 0 AND subject LIKE " + "'%" + searchparams + "%';"
cursor.execute(sql % (user_id))
两者都为我返回此错误:
TypeError: not enough arguments for format string
这是我遇到的唯一原始查询,它与我需要调用LIKE的方式有关。我可以写一个存储过程而不是绕过python,但我觉得我正在做一些愚蠢的事情并忽略了一个问题。任何帮助将不胜感激
谢谢。我认为问题的一部分是我的LIKE查询我需要将我的searchparams用百分号括起来,而下面的答案不能这样 -
subject LIKE '%somestringimlookingfor%'
上面的代码似乎出来'测试'%''。有什么想法吗?
答案 0 :(得分:3)
不要对SQL查询使用字符串插值,它完全不安全。
而是使用查询参数:
sql = """SELECT
*
FROM
db_email
WHERE
user_id = %s AND
deleted = 0 AND
subject LIKE '%%%s%%'"""
cursor.execute(sql, (user_id, searchparams))
应使用%
转义百分比符号。
UPD:
略有不同的选择:
sql = """SELECT
*
FROM
db_email
WHERE
user_id = %s AND
deleted = 0 AND
subject LIKE %s"""
cursor.execute(sql, (user_id, "%" + searchparams + "%"))
另见: