2017-02-24 4 views
0

Warum bekomme ich TypeError: not all arguments converted during string formatting beim Versuch, diese Abfrage auszuführen? Ich muss %{}% an die IP anfügen können, die ich übergebe, damit ich eine LIKE mysql Abfrage laufen lassen kann.pymysql: MySQL parametrisiert LIKE Query

Wenn dies nicht die richtige Methode ist, um eine LIKE Abfrage mit dem % Wildcard zu parametrisieren, wie machst du das?

Klasse:

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

Instantiation:

a = IpCleaner('74.121.242.2') 

a.lookup() 

output:

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

Ich bin mir nicht sicher über den Python-Code, aber es sieht so aus, als ob Ihnen nach 'Ziel' ein' LIKE' fehlt. – Uueerdo

+0

mein Schlechter, ich werde das aktualisieren. Außerdem habe ich gerade herausgefunden, dass es etwas damit zu tun hat, '' 'anstelle von'% s' zu verwenden – dobbs

Antwort

0

Verwendung %s anstelle von ? in der select_query variable