मैं जा रहा 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