Podle oficiální dokumentace:
Pokud potřebujete dynamicky generovat SQL dotaz (například dynamicky vybrat název tabulky ) můžete použít zařízení poskytované modulem psycopg2.sql.
sql modul je nový ve verzi psycopg2 2.7. Má následující syntaxi:
from psycopg2 import sql
cur.execute(
sql.SQL("insert into {} values (%s, %s)")
.format(sql.Identifier('my_table')),
[10, 20])
Více na:https://initd.org/psycopg/docs/sql.html#module-psycopg2.sql
[Aktualizace 2017-03-24:AsIs NEPOUŽÍVEJTE k reprezentaci názvů tabulek nebo polí, nový sql místo toho je třeba použít modul:https://stackoverflow.com/a/42980069/5285608 ]
Také podle dokumentace psycopg2:
Upozornění :Nikdy, nikdy , NIKDY použijte zřetězení řetězců Pythonu (
+) nebo interpolace řetězcových parametrů (%) k předání proměnných do řetězce dotazu SQL. Ani se zbraní v ruce.