MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

psycopg2 schlägt beim Ausführen vieler Anweisungen mit einem Syntaxfehler fehl

Wir sollten versuchen, diese Fehlermeldung nicht zu zitieren, um etwas klarer zu sehen, was hier vor sich geht. Wir können das am Python-Prompt tun:

>>> 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, viel besser.

Normalerweise achtet Postgres darauf, den kleinen ^ zu verwenden Zeichen, um genau auf die Stelle in der Zeile zu zeigen, an der es verwirrt wurde – aber hier zeigt es auf die Mitte des Labels „Zeile 1“, das es vorne platziert der Linie, die es verwirrte. Wahrscheinlich hat Ihr Ausschneiden und Einfügen in Stack Overflow mehrere aufeinanderfolgende Leerzeichen zusammengeklappt, was passieren kann, wenn Ihr Editor oder Browser in einer unangenehmen Stimmung war.

Ich kann also nicht genau sagen, wo in der Zeile der Fehler aufgetreten ist, aber ich habe eine sehr starke Vermutung:Irgendwie werden die dreifachen Python-Anführungszeichen, in die Sie Ihre Aussage einzuschließen versuchen, tatsächlich an Postgres weitergegeben! Nachdem Sie einige Minuten an der Postgres-Eingabeaufforderung herumgespielt haben, ist die nur Eine Möglichkeit, eine „Syntaxfehler“-Meldung zu erhalten, deren „LINE“ mit dreifachen Anführungszeichen beginnt, besteht darin, die dreifachen Anführungszeichen manuell in das SQL einzugeben, wo sie nicht hingehören (da Postgres keine dreifachen Anführungszeichen versteht; es ist ein 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""";
        ^

Das Problem besteht darin, dass dieser Fehler mit dem von Ihnen angezeigten Beispielcode nicht möglich ist. Um diesen Fehler zu erhalten, müssten Sie tatsächlich Python-Code wie diesen eingeben:

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

Es gibt andere Möglichkeiten, dreifache Anführungszeichen innerhalb einer Python-Zeichenfolge zu erhalten, aber dies ist die einfachste. In jedem Fall zeigt Ihre Postgres-Fehlermeldung mit Sicherheit, dass dreifache Anführungszeichen in Ihr SQL gelangen. Versuchen Sie also, Ihren Python-Code erneut zu überprüfen, und wir helfen Ihnen dabei, herauszufinden, wie wörtliche Anführungszeichen in Ihren Zeichenfolgen landen!