sql >> Database >  >> NoSQL >> MongoDB

psycopg2 mislukt bij het uitvoeren van veel-instructies met syntaxisfout

We moeten proberen die foutmelding te verwijderen om een ​​beetje duidelijker te zien wat hier aan de hand is. We kunnen dat doen op de Python-prompt:

>>> 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, veel beter.

Normaal gebruikt Postgres de kleine ^ teken om naar de exacte plaats in de regel te wijzen waar het in de war raakte - maar hier wijst het naar het midden van het label "Lijn 1" dat het voor plaatst van de regel die het verwarde. Waarschijnlijk heeft je knippen en plakken in Stack Overflow verschillende opeenvolgende spaties samengevouwen, wat kan gebeuren als je editor of browser in een onaangename bui was.

Dus ik kan niet precies zeggen waar in de regel de fout is opgetreden, maar ik heb een zeer sterke gok:op de een of andere manier worden de driedubbele aanhalingstekens van Python waarmee u uw verklaring probeert te omringen, daadwerkelijk doorgegeven aan Postgres! Na enkele minuten spelen op de Postgres-prompt, de alleen manier die ik kan vinden om een ​​"syntaxisfout" -bericht te krijgen waarvan de "LINE" begint met drievoudige aanhalingstekens, is om de drievoudige aanhalingstekens handmatig in de SQL te typen, waar ze niet thuishoren (aangezien Postgres drievoudige aanhalingstekens niet begrijpt; het is een Python conventie):

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

Het probleem is dat deze fout onmogelijk is met de voorbeeldcode die u hebt weergegeven. Om deze foutmelding te krijgen, had je Python-code als volgt moeten typen:

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

Er zijn andere manieren om driedubbele aanhalingstekens in een Python-string te krijgen, maar dit is de gemakkelijkste. Hoe dan ook, je Postgres-foutmelding laat zeker zien dat driedubbele aanhalingstekens in je SQL komen, dus probeer je Python-code opnieuw te controleren, en we zullen je helpen erachter te komen hoe letterlijke aanhalingstekens in je strings terechtkomen!




  1. Maven loopt niet met Spigot

  2. ServiceStack.Net Redis:gerelateerde objecten opslaan versus gerelateerde object-ID's

  3. Waarom is alert gedefinieerd, en twee regels later is het niet (Meteor)?

  4. Zoek na het bevolken mangoest