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.