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.