Esto confunde a casi todos los que trabajan con MySQLDB. Está pasando argumentos a la función de ejecución, no haciendo sustitución de cadenas de Python. El %s en la cadena de consulta se usa más como una declaración preparada que como una sustitución de cadena de python. Esto también evita la inyección de SQL, ya que MySQLDB hará el escape por usted. Como lo tenía antes (usando % y sustitución de cadenas), es vulnerable a la inyección.
- No use comillas. MySQLDB los colocará allí (si es necesario).
-
Utilice un , en lugar de un %. Nuevamente, está pasando una tupla como argumento a la función de ejecución.
self.dbc.execute("seleccione * del auto donde reg=%s" , (reg,))