【发布时间】:2021-07-02 07:09:26
【问题描述】:
我正在使用psycopg2 从我的 Postgres 服务器查询,这是查询的代码:
def execute_query(
self,
query,
query_params=None,
cursor_factory=psycopg2.extras.NamedTupleCursor,
):
try:
self.connect()
cursor_id = uuid.uuid4().hex
with self.connection.cursor(
cursor_id,
cursor_factory=cursor_factory,
) as cursor:
cursor.execute(
query,
query_params,
)
yield from cursor
finally:
self.disconnect()
有时在没有任何服务器指示(正常 CPU 和 RAM 使用)的情况下,连接会中断。 当它发生时,它会引发以下异常之一:
psycopg2.OperationalError: connection pointer is NULL
psycopg2.InterfaceError: cursor already closed
我不确定处理这些特定异常的正确方法是否是重试:
def execute_query(
self,
query,
page_size=2000,
query_params=None,
cursor_factory=psycopg2.extras.NamedTupleCursor,
):
try:
self.connect()
cursor_id = uuid.uuid4().hex
with self.connection.cursor(
cursor_id,
cursor_factory=cursor_factory,
) as cursor:
cursor.itersize = page_size
cursor.execute(
query,
query_params,
)
yield from cursor
except (
psycopg2.OperationalError,
psycopg2.InterfaceError,
):
self.execute_query(
query=query,
page_size=page_size,
query_params=query_params,
cursor_factory=cursor_factory,
)
finally:
self.disconnect()
我需要知道是否有任何方法可以预测这些异常而不在它已经引发后捕获它
谢谢!
【问题讨论】:
标签: python sql postgresql psycopg2