PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

psycopg2 :kursor sudah ditutup

Agaknya jika koneksi terputus, Anda perlu membangunnya kembali dan mendapatkan kursor lain di penangan pengecualian:

for query in queries:
    try:
        cursor.execute(query)
    except Exception as e:
        print e.message
        conn = psycopg2.connect(....)
        cursor = conn.cursor()

Anda harus lebih spesifik dengan pengecualian yang Anda tangkap. Dengan asumsi InterfaceError pengecualian jika kursor ditutup, Anda dapat menangkapnya seperti ini:

except psycopg2.InterfaceError as e:

Mungkin ada masalah lain yang tidak terlalu drastis yang akan mencegah eksekusi kueri berikutnya, mis. transaksi dibatalkan. Dalam hal ini Anda perlu mengembalikan transaksi saat ini dan kemudian mencoba kueri berikutnya:

queries = ['select count(*) from non_existent_table', 'select count(*) from existing_table']
for query in queries:
    try:
        cursor.execute(query)
    except psycopg2.ProgrammingError as exc:
        print exc.message
        conn.rollback()
    except psycopg2.InterfaceError as exc:
        print exc.message
        conn = psycopg2.connect(....)
        cursor = conn.cursor()

Di sini kueri dicoba terhadap tabel yang tidak ada. Sebuah ProgrammingError pengecualian dimunculkan, dan koneksi harus dibatalkan jika kueri lain ingin dicoba. Kueri kedua seharusnya berhasil.

Ini menutupi detail pengecualian lebih lanjut yang diajukan dalam penangan pengecualian itu sendiri, mis.connect(...) mungkin gagal saat mencoba membangun kembali koneksi, jadi Anda juga harus menanganinya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails:Memanggil .limit(5) mengubah urutan hasil

  2. nilai terlalu panjang untuk variasi karakter tipe (N)

  3. TypeError:Tidak dapat memanggil metode 'query' dari null - saat memanggil pg.connect dengan Heroku node.js

  4. Kembalikan kueri dari suatu fungsi?

  5. postgresql memperbarui beberapa tabel dalam satu permintaan