De acordo com a documentação oficial:
Se você precisar gerar dinamicamente uma consulta SQL (por exemplo, escolher dinamicamente um nome de tabela ) você pode usar os recursos fornecidos pelo módulo psycopg2.sql.
O
sql
módulo é novo no psycopg2 versão 2.7. Tem a seguinte sintaxe:from psycopg2 import sql
cur.execute(
sql.SQL("insert into {} values (%s, %s)")
.format(sql.Identifier('my_table')),
[10, 20])
Mais sobre:http://initd.org/psycopg/docs/sql.html#module-psycopg2.sql
[Atualização 24/03/2017:
AsIs
NÃO deve ser usado para representar nomes de tabelas ou campos, o novo sql
módulo deve ser usado em vez disso:https://stackoverflow.com/a/42980069/5285608 ] Além disso, de acordo com a documentação do psycopg2:
Aviso :Nunca, nunca , NUNCA use a concatenação de strings do Python (+
) ou interpolação de parâmetros de string (%
) para passar variáveis para uma string de consulta SQL. Nem mesmo sob a mira de uma arma.