我正在使用psycopg2 2.6.1
。我有一堆查询需要按顺序执行。
conn = psycopg2.connect(database=redshift_database,
user=redshift_user,
password=os.environ.get("PGPASSWORD"),
host=redshift_cluster,
port=redshift_port)
cursor = conn.cursor()
queries = [q1, q2, q3....] ## a list of queries
for query in queries:
try:
cursor.execute(query)
except:
print e.message
假设q1
因SSL connection has been closed unexpectedly
而失败。然后我的其余查询也会因cursor already closed
而失败。如何确保如果一个查询失败,则成功执行以下查询。
如果连接已断开,则可能需要重新建立连接并在异常处理程序中获取另一个光标:
你应该更具体一些,除了你捕捉到的例外。假设一个
InterfaceError
异常,如果游标以某种方式关闭,您可以这样捕获:可能还有其他不太严重的问题会阻止后续查询的执行,例如事务被中止。在这种情况下,您需要回滚当前事务,然后尝试下一个查询:
这里尝试对不存在的表进行查询。引发了
ProgrammingError
异常,如果要尝试另一个查询,则必须回滚连接。第二个查询应该成功。这掩盖了在异常处理程序本身中引发的其他异常的详细信息,例如
connect(...)
在尝试重新建立连接时可能会失败,因此您也应该处理它。您应该明确地在except bloc中重新生成光标,以防在查询的较低级别出现错误:
相关问题 更多 >
编程相关推荐