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.