Para ser más específicos... el cursor.execute()
El método toma un argumento opcional que contiene valores para ser citados e interpolados en la plantilla/declaración SQL. Esto NO se hace con un simple %
¡operador! cursor.execute(some_sql, some_params)
es NO lo mismo que cursor.execute(some_sql % some_params)
La API DB de Python
especifica que cualquier controlador/módulo compatible debe proporcionar un .paramstyle
atributo que puede ser cualquiera de 'qmark', 'numeric', 'named', 'format' o 'pyformat' ... de modo que uno podría, en teoría, adaptar sus cadenas de consulta SQL a la forma admitida a través de la introspección y un poco mung. Esto aún debería ser más seguro que tratar de citar e interpolar valores en sus cadenas SQL usted mismo.
Me divirtió particularmente leer Advertencia Nunca, nunca, NUNCA use Python cadena... interpolación... Ni siquiera a punta de pistola. en los documentos de PsicoPG.