我最近开始学习用于Web的Python和MySQL,我遇到了以下问题:
我想从mysql数据库中提取一条记录,其中包含我在param部分中输入的任何文本,但是在进行查询时我遇到了以下问题:
traceback (most recent call last):
File "/Users/Strielok/Desktop/test.py", line 13, in <module>
c.execute("SELECT * FROM data WHERE params LIKE ('%s%') LIMIT 1" % (param))
TypeError: not enough arguments for format string
这是我的代码:
import MySQLdb
db = MySQLdb.connect (host = "localhost",
user = "root",
passwd = "root",
db = "test")
param = "Test"
par = param
c = db.cursor()
c.execute("SELECT * FROM data WHERE params LIKE ('%s%') LIMIT 1" % (param))
data = c.fetchall()
print data
c.close()
提前致谢。
答案 0 :(得分:33)
直接将数据插入SQL字符串不是最好的方法,因为它很容易SQL injection。您应该将其更改为:
c.execute("SELECT * FROM data WHERE params LIKE %s LIMIT 1", ("%" + param + "%",))
答案 1 :(得分:1)
更好的方法(更安全),而不是使用字符串作为 "%" + param + "%"
将使用另一个 %
转义模板字符串中的 %
字符(因此,%%
),所以它会是:
c.execute("SELECT * FROM data WHERE params LIKE '%%%s%%' LIMIT 1", (param,))
答案 2 :(得分:0)
您没有使用正确的参数。 Python期望在该区域('%s%___')
中使用另一个限定符来进行字符串替换。这也是易受攻击的代码。正确的方法看起来更像是:
c.execute("SELECT * FROM data WHERE params LIKE '%%s%' LIMIT 1",(param,))