pymysql:MySQL参数化LIKE查询

pymysql:MySQL参数化LIKE查询

问题描述:

为什么我在执行此查询时收到TypeError: not all arguments converted during string formatting?我需要能够将%{}%附加到我传入的IP,以便我可以运行LIKE mysql查询。pymysql:MySQL参数化LIKE查询

如果这不是使用%通配符参数化LIKE查询的正确方法,那么您如何做到这一点?

类别:

class IpCleaner(object): 
    def __init__(self, ip): 
     self.ip = ip 
     self.iplike = '%{}%'.format(self.ip) 

    def lookup(self): 
     self.dbconnect() 
     select_query = (
      "SELECT `name`,`source`,`destination` FROM mytable " 
      "WHERE (`source` LIKE ? OR `destination` ?);" 
     ) 

     params = [self.iplike, self.iplike] 
     print params 
     self.cur.execute(select_query, params) 
     print self.cur.fetchall() 

实例化:

a = IpCleaner('74.121.242.2') 

a.lookup() 

输出:

Traceback (most recent call last): 
['%74.121.242.2%', '%74.121.242.2%'] 
    File "/home/dobbs/shunlibs/IpCleaner.py", line 87, in <module> 
    a.palorulelookup() 
    File "/home/dobbs/shunlibs/IpCleaner.py", line 81, in lookup 
    self.cur.execute(select_query, params) 
    File "/usr/lib64/python2.7/site-packages/pymysql/cursors.py", line 164, in execute 
    query = self.mogrify(query, args) 
    File "/usr/lib64/python2.7/site-packages/pymysql/cursors.py", line 143, in mogrify 
    query = query % self._escape_args(args, conn) 
TypeError: not all arguments converted during string formatting 
+1

不知道Python代码,但看起来你在'destination'后面缺少'LIKE'。 – Uueerdo

+0

我的不好,我会更新。我也发现它与使用'?'而不是'%s'有关 – dobbs

使用%s代替?select_query可变