Python MySQLdb WHERE SQL LIKE

你。 提交于 2019-12-18 03:44:45

问题


I have recently started to learn Python and MySQL for web purposes and I have run into a following problem :

I want to pull out from a mysql database one record that contains any text that I enter in param section, howerver I am running into following problem when making a query:

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

Here is my code:

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()

Thanks in advance.


回答1:


Directly inserting the data into the SQL string is not the best way to do this, as it is prone to SQL injection. You should change it to this:

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




回答2:


Your not using a proper parameter. Python is expecting another qualifier in this area ('%s%___') in order to do a string substitution. This is also vulnerable code. The proper way to do this would look more like:

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



来源:https://stackoverflow.com/questions/10903497/python-mysqldb-where-sql-like

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!