MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

psycopg2 nie może wykonać wielu instrukcji z błędem składni

Powinniśmy spróbować usunąć cytowanie tego komunikatu o błędzie, aby nieco jaśniej zobaczyć, co się tutaj dzieje. Możemy to zrobić po znaku zachęty Pythona:

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

Ach, znacznie lepiej.

Zwykle Postgres ostrożnie używa małego ^ znak wskazujący dokładnie to miejsce w linii, w którym się pomylił — ale tutaj wskazuje na środek etykiety „Linia 1”, którą umieszcza z przodu linii, która go myliła. Prawdopodobnie twoje kopiowanie i wklejanie do Stack Overflow zwinęło kilka kolejnych spacji, co może się zdarzyć, jeśli twój edytor lub przeglądarka były w nieprzyjemnym nastroju.

Nie mogę więc dokładnie powiedzieć, gdzie w wierszu wystąpił błąd, ale mam bardzo mocne przypuszczenie:w jakiś sposób potrójne cudzysłowy Pythona, którymi próbujesz otoczyć swoje oświadczenie, są w rzeczywistości przekazywane do Postgresa! Po kilku minutach zabawy przy znaku zachęty Postgresa jedyne sposób, w jaki mogę znaleźć komunikat „błędu składni”, którego „LINE” zaczyna się od potrójnych cudzysłowów, polega na ręcznym wpisaniu potrójnych cudzysłowów do SQL, gdzie nie należą (ponieważ Postgres nie rozumie potrójnego cudzysłowu; jest to Python konwencja):

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

Problem polega na tym, że ten błąd jest niemożliwy z przykładowym kodem, który wyświetliłeś. Aby uzyskać ten błąd, musiałbyś w rzeczywistości wpisać kod Pythona w następujący sposób:

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

Istnieją inne sposoby na uzyskanie potrójnego cudzysłowu w łańcuchu Pythona, ale ten jest najłatwiejszy. W każdym razie, twój komunikat o błędzie Postgresa z pewnością pokazuje, że potrójne cudzysłowy dostają się do twojego SQL, więc spróbuj ponownie sprawdzić swój kod Pythona, a my pomożemy ci dowiedzieć się, jak dosłowne cudzysłowy trafiają do twoich łańcuchów!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wybrać tylko dopasowany dokument podrzędny mongodb za pomocą pythona?

  2. Nie można połączyć się z MongDB Atlas za pomocą Mongoose

  3. przechowywać obrazy w mongodb za pomocą mangusty? jak?

  4. Wystąpił problem podczas dzielenia i zliczania danych w pliku CSV w MONGODB (posiadanie wartości Null w kolumnach, takich jak nazwa kolumny:)

  5. Zapytanie Active Record gdzie wartość w polu tablicy