sql >> Databáze >  >> NoSQL >> MongoDB

psycopg2 selže při provádění mnoha příkazů s chybou syntaxe

Měli bychom zkusit zrušit citaci této chybové zprávy, abychom viděli trochu jasněji, co se zde děje. Můžeme to udělat na příkazovém řádku Pythonu:

>>> 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
 ^

Aha, mnohem lepší.

Normálně Postgres opatrně používá malý ^ znak, aby ukazoval na přesné místo v řádku, kde došlo k záměně – ale zde ukazuje na střed štítku „Řádek 1“, který vkládá přední linie, která to mátla. Pravděpodobně vaše vyjmutí a vložení do Stack Overflow sbalilo několik po sobě jdoucích mezer dohromady, což se může stát, pokud měl váš editor nebo prohlížeč nepříjemnou náladu.

Nemohu tedy přesně říci, kde v řádku došlo k chybě, ale mám velmi silný odhad:nějak se do Postgresu ve skutečnosti dostávají trojité uvozovky v Pythonu, kterými se snažíte obklopit své prohlášení! Po několika minutách hraní na výzvu Postgres, jediné způsob, jak mohu najít zprávu o „chybě syntaxe“, jejíž „LINE“ začíná trojitými uvozovkami, je ve skutečnosti napsat trojité uvozovky ručně do SQL, kam nepatří (protože Postgres nerozumí trojitým uvozovkám; je to Python konvence):

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

Problém je, že tato chyba je nemožná s ukázkovým kódem, který jste zobrazili. Abyste dostali tuto chybu, museli byste ve skutečnosti napsat kód Pythonu takto:

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

Existují i ​​jiné způsoby, jak získat trojité uvozovky uvnitř řetězce Pythonu, ale toto je nejjednodušší. V každém případě vaše chybová zpráva Postgres zcela jistě ukazuje, že se do vašeho SQL dostávají trojité uvozovky, takže zkuste znovu zkontrolovat váš kód v Pythonu a my vám pomůžeme zjistit, jak se ve vašich řetězcích vinou doslovné uvozovky!




  1. Porozumění MongoDB Aggregate a GroupBy

  2. Hromadný import MongoDB pomocí mongoimport ze složky Windows

  3. Jak mongoexportovat s jedním polem

  4. Má mongoDB problémy s opětovným připojením nebo to dělám špatně?