Search code examples
pythonpython-3.xinsertpymysql

Impossible to insert data with PyMySQL when I use parameter


I'm currently working on a basic query which insert data depending on the input parameters, and I'm unable to perfom it.

cur.execute("INSERT INTO foo (bar1, bar2) values (?, ?)", (foo1, foo2))

I have this error message:

Exception in Tkinter callback Traceback (most recent call last):
File "/usr/lib/python3.2/tkinter/init.py", line 1426, in call return self.func(*args) File "test.py", line 9, in register cur.execute("INSERT INTO foo (bar1, bar2) values (?,?)", (foo1, foo2)) File "/usr/local/lib/python3.2/dist-packages/pymysql/cursors.py", line 108, in execute query = query % escaped_args TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'

foo1 and foo2 are both string type. I tried with %s, same error.


Solution

  • It seems like a bug in cursors.py. As suggested here and here you should replace this line in cursors.py:

    query = query % conn.escape(args)
    

    With this:

    query = query.decode(charset) % conn.escape(args)
    

    In case it didn't work try this one instead:

    query = query.decode(charset) % escaped_args