我最近开始学习Python和MySQL的网络用途,我遇到了以下问题:
我想从一个mysql数据库中拉出一个记录,其中包含任何文本,我在param部分输入,howerver我遇到以下问题时,使查询:
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()
先谢了。
4条答案
按热度按时间unftdfkk1#
直接将数据插入到SQL字符串中并不是最好的方法,因为它容易出现SQL injection问题。
c.execute("SELECT * FROM data WHERE params LIKE %s LIMIT 1", ("%" + param + "%",))
blpfk2vs2#
一个更好(也更安全)的方法,而不是使用字符串作为
"%" + param + "%"
,是用另一个%
(%%
)转义模板字符串中的%
字符,因此它将是:c.execute("SELECT * FROM data WHERE params LIKE '%%%s%%' LIMIT 1", (param,))
xqk2d5yq3#
你没有使用一个正确的参数。Python在
('%s%___')
区域需要另一个限定符来进行字符串替换。这也是易受攻击的代码。正确的方法应该看起来更像:c.execute("SELECT * FROM data WHERE params LIKE '%%s%' LIMIT 1",(param,))
dluptydi4#
c.execute(“SELECT * FROM数据WHERE参数类似于concat('%%',s%)限制1”,(参数,))