5
在PostgreSQL docs上BEGIN
:如何將PostgreSQL警告提升爲psycopg2中的異常?
發行時開始已經一個事務塊裏面會招來 警告消息。交易狀態不受影響。
如何讓psycopg2
在任何此類警告中引發異常?
在PostgreSQL docs上BEGIN
:如何將PostgreSQL警告提升爲psycopg2中的異常?
發行時開始已經一個事務塊裏面會招來 警告消息。交易狀態不受影響。
如何讓psycopg2
在任何此類警告中引發異常?
我被psycopg2
或Postgres
專家很遠,而且,我相信有一個更好的解決方案,以提高警告級別,但在這裏是一種適合我的工作 - a custom cursor看起來到connection notices,如果有有些東西 - 它會拋出一個異常。實施本身是教育的目的主要是 - 我相信這需要調整您的使用情況下的工作:
import psycopg2
# this "cursor" class needs to be used as a base for custom cursor classes
from psycopg2.extensions import cursor
class ErrorThrowingCursor(cursor):
def __init__(self, conn, *args, **kwargs):
self.conn = conn
super(ErrorThrowingCursor, self).__init__(*args, **kwargs)
def execute(self, query, vars=None):
result = super(ErrorThrowingCursor, self).execute(query, vars)
for notice in self.conn.notices:
level, message = notice.split(": ")
if level == "WARNING":
raise psycopg2.Warning(message.strip())
return result
用法示例:
conn = psycopg2.connect(user="user", password="secret")
cursor = conn.cursor(conn, cursor_factory=ErrorThrowingCursor)
這將拋出一個異常(一個psycopg2.Warning
的如果在查詢執行後發出警告,則鍵入)。示例:
psycopg2.Warning: there is already a transaction in progress
這看起來很乾淨。如果'psycopg'支持這樣的遊標,那麼我們會很高興。 – planetp