I want to pass query parameters to cursor.execute()
method of MySQLdb
as a named dictionary, such that they are escaped from SQL injection.
Can you explain why this gives KeyError
:
>>> c.execute('select id from users where username=%(user)s', {'user':'bob',})
KeyError: 'user'
MySQLdb manual http://mysql-python.sourceforge.net/MySQLdb.html says:
paramstyle
String constant stating the type of parameter marker formatting expected by the interface. Set to
'format'
= ANSI C printf format codes, e.g.'...WHERE name=%s'
. If a mapping object is used forconn.execute()
, then the interface actually uses'pyformat'
= Python extended format codes, e.g.'...WHERE name=%(name)s'
. However, the API does not presently allow the specification of more than one style in paramstyle.