Secondo la documentazione ufficiale:
Se devi generare dinamicamente una query SQL (ad esempio, scegliendo dinamicamente il nome di una tabella ) puoi utilizzare i servizi forniti dal modulo psycopg2.sql.
Il sql il modulo è nuovo in psycopg2 versione 2.7. Ha la seguente sintassi:
from psycopg2 import sql
cur.execute(
sql.SQL("insert into {} values (%s, %s)")
.format(sql.Identifier('my_table')),
[10, 20])
Altro su:https://initd.org/psycopg/docs/sql.html#module-psycopg2.sql
[Aggiornamento 24-03-2017:AsIs NON deve essere utilizzato per rappresentare nomi di tabelle o campi, il nuovo sql utilizzare invece il modulo:https://stackoverflow.com/a/42980069/5285608 ]
Inoltre, secondo la documentazione di psycopg2:
Avviso :Mai, mai , MAI usa la concatenazione di stringhe Python (+ ) o interpolazione di parametri stringa (% ) per passare variabili a una stringa di query SQL. Nemmeno sotto tiro.