Python MySQLdb WHERE SQL类似语句

yx2lnoni  于 2023-01-29  发布在  Mysql
关注(0)|答案(4)|浏览(129)

我最近开始学习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()

先谢了。

unftdfkk

unftdfkk1#

直接将数据插入到SQL字符串中并不是最好的方法,因为它容易出现SQL injection问题。
c.execute("SELECT * FROM data WHERE params LIKE %s LIMIT 1", ("%" + param + "%",))

blpfk2vs

blpfk2vs2#

一个更好(也更安全)的方法,而不是使用字符串作为"%" + param + "%",是用另一个%%%)转义模板字符串中的%字符,因此它将是:
c.execute("SELECT * FROM data WHERE params LIKE '%%%s%%' LIMIT 1", (param,))

xqk2d5yq

xqk2d5yq3#

你没有使用一个正确的参数。Python在('%s%___')区域需要另一个限定符来进行字符串替换。这也是易受攻击的代码。正确的方法应该看起来更像:
c.execute("SELECT * FROM data WHERE params LIKE '%%s%' LIMIT 1",(param,))

dluptydi

dluptydi4#

c.execute(“SELECT * FROM数据WHERE参数类似于concat('%%',s%)限制1”,(参数,))

相关问题