PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

psycopg2 :कर्सर पहले ही बंद है

संभवत:यदि कनेक्शन गिर गया है तो आपको इसे फिर से स्थापित करना होगा और अपवाद हैंडलर में एक और कर्सर प्राप्त करना होगा:

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(...) कनेक्शन को पुन:स्थापित करने का प्रयास करते समय विफल हो सकता है, इसलिए आपको इसे भी संभालना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं Postgres में डेटा की अपनी दो डुप्लिकेट पंक्तियों में से एक को कैसे हटाऊं?

  2. एकाधिक सम्मिलित तालिकाओं पर कुल कार्य

  3. Psycopg2 पोस्टग्रेज डेटाबेस में पायथन डिक्शनरी डालें

  4. बैच फ़ाइल में pg_dump द्वारा सभी डीबी का बैकअप कैसे लें - पोस्टग्रेज

  5. TextField पर URLField का उपयोग करने के लाभ?