Isso confunde quase todos que trabalham com MySQLDB. Você está passando argumentos para a função execute, não fazendo substituição de string python. O %s na string de consulta é usado mais como uma instrução preparada do que como uma substituição de string python. Isso também evita a injeção de SQL, pois o MySQLDB fará o escape para você. Como você tinha antes (usando % e substituição de string), você está vulnerável à injeção.
- Não use aspas. MySQLDB irá colocá-los lá (se necessário).
-
Use um , em vez de um %. Novamente, você está passando uma tupla como argumento para a função execute.
self.dbc.execute("select * from car where reg=%s" , (reg,))