MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

psycopg2 gagal mengeksekusi banyak pernyataan dengan kesalahan sintaksis

Kita harus mencoba menghapus kutipan pesan kesalahan itu untuk melihat lebih jelas apa yang terjadi di sini. Kita bisa melakukannya di 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
 ^

Ahh, jauh lebih baik.

Biasanya, Postgres berhati-hati dalam menggunakan ^ little kecil karakter untuk menunjuk ke tempat yang tepat di baris yang membuatnya bingung — tetapi di sini, ia menunjuk di tengah label “Baris 1” yang diletakkan di depan dari garis yang membingungkan itu. Mungkin cut-and-paste Anda ke Stack Overflow menciutkan beberapa spasi berturut-turut, yang dapat terjadi jika editor atau browser Anda sedang dalam mood yang tidak menyenangkan.

Jadi saya tidak tahu persis di mana di baris kesalahan terjadi, tapi saya punya tebakan yang sangat kuat:entah bagaimana, tanda kutip tiga Python yang Anda coba untuk mengelilingi pernyataan Anda sebenarnya diteruskan ke Postgres! Setelah beberapa menit bermain-main pada prompt Postgres, hanya cara saya dapat menemukan untuk mendapatkan pesan "kesalahan sintaksis" yang "LINE" dimulai dengan tanda kutip tiga adalah dengan benar-benar mengetik tanda kutip tiga secara manual ke dalam SQL, di mana mereka tidak termasuk (karena Postgres tidak mengerti kutipan tiga; itu Python konvensi):

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

Masalahnya adalah kesalahan ini tidak mungkin dilakukan dengan kode sampel yang telah Anda tampilkan. Untuk mendapatkan kesalahan ini, Anda sebenarnya harus mengetikkan kode Python seperti ini:

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

Ada cara lain untuk mendapatkan tanda kutip tiga di dalam string Python, tetapi ini yang termudah. Bagaimanapun, pesan kesalahan Postgres Anda pasti menunjukkan bahwa tanda kutip tiga masuk ke dalam SQL Anda, jadi coba periksa kode Python Anda lagi, dan kami akan membantu Anda mengetahui bagaimana tanda kutip literal berakhir di dalam string Anda!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah Azure DocumentDB Local Emulator mendukung protokol mongodb?

  2. Bagaimana cara membalikkan agregasi pelepasan?

  3. pengaturan validasi kesalahan mongodb:hanya satu argumen posisi yang diizinkan

  4. Performa agregasi pencarian yang buruk

  5. API Connect menunjukkan kesalahan Cannot GET /apim/ saat memperbarui skema