es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de formato de psycopg2 al usar el módulo SQL.

Me imagino que esto será fácil para alguien, pero no puedo resolverlo…

Estoy desarrollando una consulta SQL dinámicamente siguiendo las instrucciones aquí. Después de crear una conexión postgresql y un objeto de cursor, uso el módulo sql de psycopg2 para crear una consulta con parámetros de la siguiente manera:

query = sql.SQL(“SELECT * FROM {t_name} WHERE {col} in %s;”.format(
t_name=sql.Identifier(table_name),
col=sql.Identifier(fips_col)))

Esto funciona bien (que yo sepa) con este resultado:

SQL(“SELECT * FROM Identifier(‘cb_tracts’) WHERE Identifier(‘st_cnty_fips’) in %s;”)

Luego intento ejecutar con un argumento (o lista de argumentos):

cursor.execute(query, (‘06037’,))

o

cursor.execute(query, ([‘06037’],))

Pero obtengo este error:

psycopg2.errors.SyntaxError: error de sintaxis cerca de “‘06073′”
LINE 1: …er(‘cb_tracts’) WHERE Identifier(‘st_cnty_fips’) in ‘06073…

y este error, respectivamente:

psycopg2.errors.SyntaxError: error de sintaxis cerca de “ARRAY”
LINE 1: …(‘cb_tracts’) WHERE Identifier(‘st_cnty_fips’) in ARRAY[‘060…

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la sintaxis del parámetro de consulta. En el primer ejemplo, en lugar de pasar una tupla como argumento, debes pasar una lista con una sola tupla dentro de ella. Así:

    cursor.execute(query, ([('06037',)],))
    

    En el segundo ejemplo, necesitas pasar el argumento como una tupla en lugar de una lista:

    cursor.execute(query, (['06037'],))
    

    Esto debería resolver los errores de sintaxis y permitir que la consulta se ejecute como se espera.

Comments are closed.