sql >> Database teknologi >  >> NoSQL >> MongoDB

psycopg2 fejler ved at udføre mange sætninger med syntaksfejl

Vi bør prøve at fjerne denne fejlmeddelelse for at se lidt mere klart, hvad der foregår her. Vi kan gøre det ved Python-prompten:

>>> 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, meget bedre.

Normalt er Postgres omhyggelig med at bruge den lille ^ tegn for at pege på det nøjagtige sted på linjen, hvor det blev forvirret - men her peger det på midten af ​​"Linje 1"-etiketten, som det sætter foran af linjen, der forvirrede det. Sandsynligvis har din klip-og-indsæt i Stack Overflow kollapset flere på hinanden følgende mellemrum sammen, hvilket kan ske, hvis din editor eller browser var i et ubehageligt humør.

Så jeg kan ikke fortælle nøjagtigt, hvor i linjen fejlen opstod, men jeg har et meget stærkt gæt:på en eller anden måde bliver de Python-tredobbelte citater, som du forsøger at omgive dit udsagn med, faktisk sendt videre til Postgres! Efter flere minutters leg ved Postgres-prompten er den eneste måde, jeg kan finde for at få en "syntaksfejl"-meddelelse, hvis "LINE" starter med tredobbelte anførselstegn, er faktisk at skrive de tredobbelte anførselstegn manuelt i SQL, hvor de ikke hører hjemme (da Postgres ikke forstår tredobbelte citater; det er en Python konvention):

$ 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""";
        ^

Problemet er, at denne fejl er umulig med den prøvekode, du har vist. For at få denne fejl, ville du faktisk have været nødt til at skrive Python-kode som denne:

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

Der er andre måder at få tredobbelte anførselstegn inde i en Python-streng, men dette er den nemmeste. Under alle omstændigheder viser din Postgres-fejlmeddelelse helt sikkert, at tredobbelte anførselstegn kommer ind i din SQL, så prøv at tjekke din Python-kode igen, og vi vil hjælpe dig med at finde ud af, hvordan bogstavelige anførselstegn vinder op inde i dine strenge!




  1. Mongodb afvikle indlejrede dokumenter

  2. Hvordan ClusterControl udfører automatisk databasegendannelse og failover

  3. MongoDB indsæt dokument eller inkrementfelt, hvis det findes i array

  4. Sådan returneres data fra MongoDB