2016-07-06 56 views

回答

2

我被psycopg2Postgres專家很遠,而且,我相信有一個更好的解決方案,以提高警告級別,但在這裏是一種適合我的工作 - 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 
+0

這看起來很乾淨。如果'psycopg'支持這樣的遊標,那麼我們會很高興。 – planetp