PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

psycopg2 :курсорът вече е затворен

Предполага се, че ако връзката е прекъсната, ще трябва да я възстановите и да получите друг курсор в манипулатора на изключения:

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

Трябва да сте по-конкретни с изключенията, които хващате. Приемане на InterfaceError изключение, ако курсорът е затворен по някакъв начин, можете да го уловите по този начин:

except psycopg2.InterfaceError as e:

Може да има други по-малко драстични проблеми, които ще попречат на изпълнението на последващи заявки, напр. транзакцията е прекратена. В такъв случай трябва да върнете назад текущата транзакция и след това да опитате следващата заявка:

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()

Тук се опитва заявка срещу несъществуваща таблица. ProgrammingError е повдигнато изключение и връзката трябва да бъде върната, ако трябва да се направи опит за друга заявка. Второто запитване трябва да е успешно.

Това прикрива подробностите за допълнителни изключения, повдигнати в самите манипулатори на изключения, напр.connect(...) може да се провали при опит за възстановяване на връзката, така че трябва да се справите и с това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите запис от втората най-висока до най-ниска стойност въз основа на ред по поле в PostgreSQL

  2. Свързване с Heroku Postgres от Spring Boot

  3. PostgreSQL - ограничава общия размер на журнала

  4. Как да съхранявам дати с различни нива на точност в postgres?

  5. ГРЕШКА:кешираният план не трябва да променя типа резултат при смесване на DDL с SELECT чрез JDBC