datos consultar conectar con python sql postgresql parameters psycopg2

python - consultar - Pasar el nombre de la columna como parámetro a PostgreSQL usando psycopg2



psycopg2 connect (2)

No puede usar parámetros SQL para nombres de objetos SQL . Los parámetros de SQL citan valores explícitamente para que no se puedan interpretar como tales; esa es una de las principales razones para usar los parámetros de SQL de lo contrario .

Tendrás que usar la interpolación de cadenas aquí. Tenga mucho cuidado de no utilizar la información del usuario para producir c aquí:

for c in row1: cur.execute("ALTER TABLE HHV2PUB ADD COLUMN %s text" % c)

Psycopg2 te da un método para marcar los parámetros como ''ya escapó'' con psycopg2.extensions.AsIs() , pero la intención es que esto se use en datos ya escapados.

Una idea mucho mejor es usar la extensión psycopg2.sql para gestionar el escapado del identificador correcto:

from psycopg2 import sql for c in row1: cur.execute( sql.SQL("ALTER TABLE HHV2PUB ADD COLUMN {} text").format( sql.Identifier(c)))

Estoy tratando de agregar columnas a una tabla usando psycopg2

row1 continuación es una lista de nombres de columnas para agregar a la tabla. Puedo hacerlo manualmente pero cuando trato de hacerlo programáticamente recibo un error.

for c in row1: cur.execute("ALTER TABLE HHV2PUB ADD COLUMN %s text", (c,))

El error es:

cur.execute("ALTER TABLE HHV2PUB ADD COLUMN %s text", (c,)) psycopg2.ProgrammingError: syntax error at or near "''HOUSEID''" LINE 1: ALTER TABLE HHV2PUB ADD COLUMN ''HOUSEID'' text

Supongo que tiene algo que ver con las comillas simples ''''


A partir de Psycopg 2.7 existe el módulo seguro sql :

from psycopg2 import sql query = sql.SQL("alter table t add column {} text") row1 = (''col1'', ''col2'') for c in row1: cursor.execute(query.format(sql.Identifier(c)))

Con 2.6 y anterior:

Use psycopg2.extensions.AsIs

El adaptador cumple con el protocolo ISQLQuote útil para objetos cuya representación de cadena ya es válida como representación de SQL.

import psycopg2 from psycopg2.extensions import AsIs conn = psycopg2.connect("host=localhost4 port=5432 dbname=cpn") cursor = conn.cursor() query = "alter table t add column %s text" row1 = (''col1'', ''col2'') for c in row1: cursor.execute(query, (AsIs(c),)) conn.commit()