Vraisemblablement, si la connexion a été interrompue, vous devrez la rétablir et obtenir un autre curseur dans le gestionnaire d'exception :
for query in queries:
try:
cursor.execute(query)
except Exception as e:
print e.message
conn = psycopg2.connect(....)
cursor = conn.cursor()
Vous devriez être plus précis avec les exceptions que vous attrapez. En supposant une InterfaceError
exception si le curseur est fermé d'une manière ou d'une autre, vous pouvez l'attraper comme ceci :
except psycopg2.InterfaceError as e:
Il peut y avoir d'autres problèmes moins drastiques qui empêcheront l'exécution des requêtes suivantes, par ex. la transaction est annulée. Dans ce cas, vous devez annuler la transaction en cours, puis essayer la requête suivante :
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()
Ici, une requête est tentée sur une table inexistante. Une ProgrammingError
une exception est déclenchée et la connexion doit être annulée si une autre requête doit être tentée. La deuxième requête devrait réussir.
Cela passe sous silence les détails des autres exceptions déclenchées dans les gestionnaires d'exceptions eux-mêmes, par exemple connect(...)
peut échouer lors de la tentative de rétablissement de la connexion, vous devez donc également gérer cela.