Python MySQLdb,其中类似SQL

Python MySQLdb,其中类似SQL,python,mysql,mysql-python,Python,Mysql,Mysql Python,我最近开始学习用于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

我最近开始学习用于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

提前感谢。

您没有使用正确的参数。Python希望在此区域中有另一个限定符
(“%s%”
),以便进行字符串替换。这也是易受攻击的代码。正确的方法看起来更像:


c.execute(“从数据中选择*,其中参数“%%s%”限制1”(param,)

直接将数据插入SQL字符串并不是最好的方法,因为它很容易出错。您应该将其更改为:

c.execute(“从参数中选择*,如%s LIMIT 1”(“%”+param+“%”)
一个更好的方法(更安全),而使用字符串作为
“%”+param+“%”
将是用另一个
%
(因此,
%
)来转义模板字符串中的
%
字符,因此它将是:


c.execute(“从数据中选择*,其中参数“%%s%%”LIMIT 1”(参数,)

我认为这不会导致相同的查询。最后一个字符串将是%param%的LIKE子句,而不是@univerio想要的param%。哎呀,你完全正确@univerio。删除了我的答案,你的答案更好。谢谢,你的解决方案是最好的,我喜欢这个部分“(“%”+param+“%”,)”
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()