De acordo com a especificação do banco de dados Python em PEP 249 , o formato usado em uma consulta para mostrar onde inserir os parâmetros depende do
paramstyle membro do módulo de banco de dados:- se for
qmark, use?(ponto de interrogação) - se for
numeric, use:1,:2etc. (numérico, estilo posicional) - se for
named, use:name(estilo nomeado) - se for
format, use%s(códigos de formato ANSI C printf) - se for
pyformat, use%(name)s(Códigos de formato estendido do Python)
AFAIR, MySQLdb usa
format , então você deve substituir seu ? com %s .(Se o MySQLdb usasse corretamente as instruções preparadas, seria qmark e ? era o caminho certo a seguir.)