PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Passando o nome da tabela como parâmetro no psycopg2


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.