MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

psycopg2 falha ao executar muitas instruções com erro de sintaxe


Devemos tentar retirar a citação dessa mensagem de erro para ver um pouco mais claramente o que está acontecendo aqui. Podemos fazer isso no prompt do 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
 ^

Ah, muito melhor.

Normalmente, o Postgres tem o cuidado de usar o pequeno ^ caractere para apontar para o local exato na linha onde ficou confuso - mas aqui, está apontando para o meio do rótulo "Linha 1" que ele coloca na frente da linha que o confundiu. Provavelmente, seu recortar e colar no Stack Overflow recolheu vários espaços consecutivos juntos, o que pode acontecer se seu editor ou navegador estiver com um humor desagradável.

Portanto, não posso dizer exatamente onde na linha ocorreu o erro, mas tenho um palpite muito forte:de alguma forma, as aspas triplas do Python com as quais você está tentando cercar sua declaração estão realmente sendo passadas para o Postgres! Depois de vários minutos brincando no prompt do Postgres, o somente maneira que eu posso encontrar para obter uma mensagem de “erro de sintaxe” cujo ”LINE” começa com aspas triplas é realmente digitar as aspas triplas manualmente no SQL, onde elas não pertencem (já que o Postgres não entende as aspas triplas; é um Python convenção):
$ 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""";
        ^

O problema é que esse erro é impossível com o código de exemplo que você exibiu. Para obter esse erro, você teria que digitar o código Python assim:
cur.executemany('"""INSERT INTO ddmension(id,name) ..."""', data) 

Existem outras maneiras de obter aspas triplas dentro de uma string Python, mas esta é a mais fácil. De qualquer forma, sua mensagem de erro do Postgres certamente está mostrando que aspas triplas estão entrando em seu SQL, então tente verificar seu código Python novamente, e nós o ajudaremos a descobrir como as aspas literais estão terminando dentro de suas strings!