संभवत:यदि कनेक्शन गिर गया है तो आपको इसे फिर से स्थापित करना होगा और अपवाद हैंडलर में एक और कर्सर प्राप्त करना होगा:
for query in queries:
try:
cursor.execute(query)
except Exception as e:
print e.message
conn = psycopg2.connect(....)
cursor = conn.cursor()
आपके द्वारा पकड़े गए अपवादों के साथ आपको अधिक विशिष्ट होना चाहिए। एक InterfaceError
मानकर अपवाद अगर कर्सर किसी तरह बंद है तो आप इसे इस तरह पकड़ सकते हैं:
except psycopg2.InterfaceError as e:
अन्य कम कठोर समस्याएं हो सकती हैं जो बाद के प्रश्नों को निष्पादित करने से रोकेंगी, उदा। लेन-देन निरस्त कर दिया गया है। उस स्थिति में आपको वर्तमान लेनदेन को वापस लेना होगा और फिर अगली क्वेरी का प्रयास करना होगा:
queries = ['select count(*) from non_existent_table', 'select count(*) from existing_table']
for query in queries:
try:
cursor.execute(query)
except psycopg2.ProgrammingError as exc:
print exc.message
conn.rollback()
except psycopg2.InterfaceError as exc:
print exc.message
conn = psycopg2.connect(....)
cursor = conn.cursor()
यहां एक गैर-मौजूद तालिका के विरुद्ध एक प्रश्न का प्रयास किया गया है। एक ProgrammingError
अपवाद उठाया जाता है, और यदि किसी अन्य क्वेरी का प्रयास किया जाना है तो कनेक्शन को वापस रोल किया जाना चाहिए। दूसरी क्वेरी सफल होनी चाहिए।
यह अपवाद संचालकों में स्वयं उठाए जा रहे आगे के अपवादों के विवरण पर प्रकाश डालता है, उदा.connect(...)
कनेक्शन को पुन:स्थापित करने का प्रयास करते समय विफल हो सकता है, इसलिए आपको इसे भी संभालना चाहिए।