Enligt den officiella dokumentationen:
Om du behöver generera en SQL-fråga dynamiskt (till exempel att dynamiskt välja ett tabellnamn ) kan du använda faciliteterna som tillhandahålls av modulen psycopg2.sql.
sql
modulen är ny i psycopg2 version 2.7. Den har följande syntax:
from psycopg2 import sql
cur.execute(
sql.SQL("insert into {} values (%s, %s)")
.format(sql.Identifier('my_table')),
[10, 20])
Mer på:http://initd.org/psycopg/docs/sql.html#module-psycopg2.sql
[Uppdatering 2017-03-24:AsIs
ska INTE användas för att representera tabell- eller fältnamn, den nya sql
modulen bör användas istället:https://stackoverflow.com/a/42980069/5285608 ]
Dessutom, enligt psycopg2 dokumentation:
Varning :Aldrig, aldrig , ALDRIG använd Python-strängsammansättning (
+
) eller interpolering av strängparametrar (%
) för att skicka variabler till en SQL-frågesträng. Inte ens under pistolhot.