Para ser mais específico... o
cursor.execute() O método recebe um argumento opcional que contém valores a serem citados e interpolados no modelo/instrução SQL. Isso NÃO é feito com um simples % operador! cursor.execute(some_sql, some_params) é NÃO o mesmo que cursor.execute(some_sql % some_params) A API de banco de dados Python especifica que qualquer driver/módulo compatível deve fornecer um
.paramstyle atributo que pode ser 'qmark', 'numeric', 'named', 'format' ou 'pyformat' ... pouco mingau. Isso ainda deve ser mais seguro do que tentar citar e interpolar valores em suas strings SQL. Fiquei particularmente divertido ao ler Aviso Nunca, nunca, NUNCA use Python string ... interpolação ... Nem mesmo sob a mira de uma arma. nos documentos do PsychoPG.