Python的MySQLdb的WHERE SQL LIKE(Python MySQLdb WHERE

2019-06-25 05:16发布

我最近开始学习Python和MySQL的Web目的,我遇到了如下问题:

我想从包含我在参数部分输入任何文字MySQL数据库的一个记录拔出,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()

提前致谢。

Answer 1:

将数据直接插入SQL字符串不是做到这一点的最好办法,因为很容易出现SQL注入 。 你应该把它改成这样:

c.execute("SELECT * FROM data WHERE params LIKE %s LIMIT 1", ("%" + param + "%",))



Answer 2:

你没有使用正确的参数。 Python是希望在这方面的另一个预选赛('%s%___')为了做一个字符串替换。 这也是有漏洞的代码。 这样做的正确方法看起来更像是:

c.execute("SELECT * FROM data WHERE params LIKE '%%s%' LIMIT 1",(param,))



文章来源: Python MySQLdb WHERE SQL LIKE