Pravděpodobně pokud se připojení přeruší, budete jej muset znovu navázat a získat další kurzor v obslužné rutině výjimky:
for query in queries:
try:
cursor.execute(query)
except Exception as e:
print e.message
conn = psycopg2.connect(....)
cursor = conn.cursor()
Měl bys být konkrétnější až na výjimky, které chytáš. Za předpokladu InterfaceError
výjimka, pokud je kurzor nějak zavřený, můžete to zachytit takto:
except psycopg2.InterfaceError as e:
Mohou se vyskytnout další méně drastické problémy, které zabrání provedení následných dotazů, např. transakce je přerušena. V takovém případě musíte aktuální transakci vrátit zpět a poté zkusit další dotaz:
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()
Zde je dotaz zkoušen na neexistující tabulku. ProgrammingError
je vyvolána výjimka a připojení musí být odvoláno, pokud má být proveden další dotaz. Druhý dotaz by měl být úspěšný.
Toto zamlčuje podrobnosti o dalších výjimkách vyvolaných samotnými obslužnými rutinami výjimek, např.connect(...)
může selhat při pokusu o opětovné navázání připojení, takže byste to měli řešit také.