Presumivelmente, se a conexão cair, você precisará restabelecê-la e obter outro cursor no manipulador de exceção:
for query in queries:
try:
cursor.execute(query)
except Exception as e:
print e.message
conn = psycopg2.connect(....)
cursor = conn.cursor()
Você deve ser mais específico com as exceções que você pegar. Assumindo um
InterfaceError
exceção se o cursor estiver de alguma forma fechado, você pode pegar isso assim:except psycopg2.InterfaceError as e:
Pode haver outros problemas menos drásticos que impedirão a execução de consultas subsequentes, por exemplo, a transação é abortada. Nesse caso, você precisa reverter a transação atual e tentar a próxima consulta:
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()
Aqui, uma consulta é tentada em uma tabela inexistente. Um
ProgrammingError
exceção é levantada e a conexão deve ser revertida se outra consulta for tentada. A segunda consulta deve ser bem-sucedida. Isso encobre os detalhes de outras exceções sendo levantadas nos próprios manipuladores de exceção, por exemplo,
connect(...)
pode falhar ao tentar restabelecer a conexão, então você deve lidar com isso também.