Según la documentación oficial:
Si necesita generar dinámicamente una consulta SQL (por ejemplo, elegir dinámicamente un nombre de tabla ) puede usar las facilidades provistas por el módulo psycopg2.sql.
El sql
módulo es nuevo en psycopg2 versión 2.7. Tiene la siguiente sintaxis:
from psycopg2 import sql
cur.execute(
sql.SQL("insert into {} values (%s, %s)")
.format(sql.Identifier('my_table')),
[10, 20])
Más en:http://initd.org/psycopg/docs/sql.html#module-psycopg2.sql
[Actualización 2017-03-24:AsIs
NO debe usarse para representar nombres de tablas o campos, el nuevo sql
se debe usar el módulo en su lugar:https://stackoverflow.com/a/42980069/5285608 ]
Además, según la documentación de psycopg2:
Advertencia :Nunca, nunca , NUNCA use la concatenación de cadenas de Python (+
) o interpolación de parámetros de cadena (%
) para pasar variables a una cadena de consulta SQL. Ni siquiera a punta de pistola.