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:https://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.