sql >> Database >  >> RDS >> PostgreSQL

psycopg2:cursor al gesloten

Vermoedelijk, als de verbinding is verbroken, moet u deze opnieuw tot stand brengen en een andere cursor in de uitzonderingshandler krijgen:

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

Je moet specifieker zijn met de uitzonderingen die je opvangt. Uitgaande van een InterfaceError uitzondering als de cursor op de een of andere manier gesloten is, kun je dat als volgt opvangen:

except psycopg2.InterfaceError as e:

Er kunnen andere, minder ingrijpende problemen zijn die voorkomen dat volgende zoekopdrachten worden uitgevoerd, b.v. de transactie wordt afgebroken. In dat geval moet u de huidige transactie terugdraaien en vervolgens de volgende vraag proberen:

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

Hier wordt een query uitgevoerd op een niet-bestaande tabel. Een ProgrammingError uitzondering wordt gegenereerd en de verbinding moet worden teruggedraaid als een andere query moet worden geprobeerd. De tweede vraag zou moeten slagen.

Dit verdoezelt de details van verdere uitzonderingen die in de uitzonderingsbehandelaars zelf naar voren worden gebracht, bijvoorbeeld connect(...) kan mislukken wanneer u probeert de verbinding opnieuw tot stand te brengen, dus u moet dat ook doen.



  1. Android verbinden met MS SQL SERVER 2008

  2. TOP 10 rijen ophalen zonder TOP of LIMIT te gebruiken? – Interviewvraag van de week #247

  3. hoe word-document in browser in localhost weer te geven?

  4. Een foutmelding verbergen