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!