sql >> Base de Datos >  >> NoSQL >> MongoDB

psycopg2 falla al ejecutar muchas declaraciones con error de sintaxis

Deberíamos intentar quitar las comillas de ese mensaje de error para ver un poco más claramente lo que está pasando aquí. Podemos hacerlo en el indicador de Python:

>>> message = 'syntax error at or near """"INSERT INTO dimension (id, name) VALUES (1, E\'A\')""""\nLINE 1: """INSERT INTO dimension (id, name) VALUES (1, E\'A\n ^\n'
>>> print message
syntax error at or near """"INSERT INTO dimension (id, name) VALUES (1, E'A')""""
LINE 1: """INSERT INTO dimension (id, name) VALUES (1, E'A
 ^

Ahh, mucho mejor.

Normalmente, Postgres tiene cuidado de usar el pequeño ^ carácter para señalar el lugar exacto en la línea donde se confundió, pero aquí, está señalando en el medio de la etiqueta "Línea 1" que se coloca en frente de la línea que lo confundió. Probablemente, su acción de cortar y pegar en Stack Overflow colapsó varios espacios consecutivos, lo que puede ocurrir si su editor o navegador no estaban de buen humor.

Así que no puedo decir exactamente en qué parte de la línea ocurrió el error, pero tengo una conjetura muy fuerte:de alguna manera, las comillas triples de Python con las que está tratando de rodear su declaración en realidad se pasan a Postgres. Después de varios minutos de jugar con el indicador de Postgres, el solo La forma que puedo encontrar para obtener un mensaje de "error de sintaxis" cuya "LINEA" comienza con comillas triples es escribir las comillas triples manualmente en el SQL, donde no pertenecen (ya que Postgres no entiende las comillas triples; es un Python convención):

$ psql postgres 
Null display is "NULL".
psql (8.4.8)
Type "help" for help.

postgres=# """SELECT 1""";
ERROR:  syntax error at or near """"SELECT 1""""
LINE 1: """SELECT 1""";
        ^

El problema es que este error es imposible con el código de muestra que has mostrado. Para obtener este error, habría tenido que escribir un código de Python como este:

cur.executemany('"""INSERT INTO ddmension(id,name) ..."""', data) 

Hay otras formas de obtener comillas triples dentro de una cadena de Python, pero esta es la más fácil. En cualquier caso, su mensaje de error de Postgres ciertamente muestra que las comillas triples están entrando en su SQL, así que intente verificar su código Python nuevamente, ¡y lo ayudaremos a descubrir cómo las comillas literales terminan dentro de sus cadenas!