Om anslutningen har avbrutits måste du förmodligen återupprätta den och få en annan markör i undantagshanteraren:
for query in queries:
try:
cursor.execute(query)
except Exception as e:
print e.message
conn = psycopg2.connect(....)
cursor = conn.cursor()
Du bör vara mer specifik med de undantag som du fångar upp. Förutsatt ett InterfaceError
undantag om markören är stängd på något sätt kan du fånga det så här:
except psycopg2.InterfaceError as e:
Det kan finnas andra mindre drastiska problem som kommer att hindra efterföljande frågor från att köras, t.ex. transaktionen avbryts. I så fall måste du återställa den aktuella transaktionen och sedan försöka med nästa fråga:
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()
Här prövas en fråga mot en icke-existerande tabell. Ett ProgrammingError
undantag uppstår och anslutningen måste återställas om en annan fråga ska göras. Den andra frågan bör lyckas.
Detta överskuggar detaljerna om ytterligare undantag som tas upp i själva undantagshanterarna, t.ex.connect(...)
kan misslyckas när du försöker återupprätta anslutningen, så du bör hantera det också.