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.