Vi bör försöka ta bort det felmeddelandet för att se lite tydligare vad som händer här. Vi kan göra det vid 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, mycket bättre.
Normalt sett är Postgres noga med att använda den lilla ^
tecken för att peka på den exakta plats på raden där den blev förvirrad – men här pekar den på mitten av etiketten "Linje 1" som den sätter fram av linjen som förvirrade det. Förmodligen kollapsade ditt klipp-och-klistra i Stack Overflow flera på varandra följande utrymmen, vilket kan hända om din redigerare eller webbläsare var på ett obehagligt humör.
Så jag kan inte säga exakt var i raden felet uppstod, men jag har en mycket stark gissning:på något sätt skickas faktiskt Python-trippelcitaten som du försöker omge ditt uttalande med till Postgres! Efter flera minuters lek vid Postgres-prompten, den enda sättet jag kan hitta för att få ett "syntaxfel"-meddelande vars "LINE" börjar med trippelcitattecken är att faktiskt skriva in trippelcitattecken manuellt i SQL, där de inte hör hemma (eftersom Postgres inte förstår trippelcitattecken; det är 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 är att detta fel är omöjligt med exempelkoden som du har visat. För att få det här felet hade du faktiskt behövt skriva Python-kod så här:
cur.executemany('"""INSERT INTO ddmension(id,name) ..."""', data)
Det finns andra sätt att få trippelcitattecken inuti en Python-sträng, men det här är det enklaste. I vilket fall som helst visar ditt Postgres-felmeddelande med största säkerhet att tredubbla citattecken kommer in i din SQL, så försök kontrollera din Python-kod igen, så hjälper vi dig att ta reda på hur bokstavliga citattecken hamnar i dina strängar!