PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

psycopg2 :kursor już zamknięty

Przypuszczalnie, jeśli połączenie zostało zerwane, będziesz musiał je ponownie nawiązać i umieścić kolejny kursor w obsłudze wyjątków:

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

Powinieneś być bardziej szczegółowy z wyjątkami, które łapiesz. Zakładając InterfaceError wyjątek, jeśli kursor jest jakoś zamknięty, możesz to złapać w ten sposób:

except psycopg2.InterfaceError as e:

Mogą wystąpić inne, mniej drastyczne problemy, które uniemożliwią wykonanie kolejnych zapytań, np. transakcja została przerwana. W takim przypadku musisz wycofać bieżącą transakcję, a następnie spróbować następnego zapytania:

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

Tutaj zapytanie jest wypróbowywane w nieistniejącej tabeli. ProgrammingError zgłoszony jest wyjątek, a połączenie musi zostać wycofane, jeśli ma zostać wykonana inna kwerenda. Drugie zapytanie powinno się udać.

To pomija szczegóły dalszych wyjątków zgłaszanych w samych procedurach obsługi wyjątków, np. connect(...) może się nie powieść podczas próby ponownego nawiązania połączenia, więc powinieneś sobie z tym poradzić.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wynik z dynamicznego SQL w Postgresie?

  2. Wstawianie/aktualizacja zbiorcza Postgres, która jest bezpieczna dla wstrzyknięć. Może funkcja, która pobiera tablicę?

  3. Błąd PostGIS:nie można wybrać najlepszej funkcji kandydata

  4. docker compose:postgresql utwórz bazę danych, przekaż użytkownika i nadaj uprawnienia

  5. Jak korzystać z białych list i przygotowanych wyciągów z Postgresql w php?