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

AttributeError:__exit__ अजगर 3.4 पर

आप एक संदर्भ प्रबंधक के रूप में कनेक्शन का उपयोग करने का प्रयास कर रहे हैं:

with conn:

यह ऑब्जेक्ट इस तरह उपयोग की जाने वाली आवश्यक विधियों को लागू नहीं करता है; यह एक संदर्भ प्रबंधक नहीं है, क्योंकि यह गायब है (कम से कम) __exit__ विधि

यदि आप कोई ट्यूटोरियल या दस्तावेज़ पढ़ रहे हैं जो भिन्न . का उपयोग करता है MySQL लाइब्रेरी, ध्यान रखें कि यह सुविधा कुछ द्वारा समर्थित हो सकती है पुस्तकालय, बस यह नहीं। MySQLdb प्रोजेक्ट उदाहरण के लिए, इसका समर्थन करता है।

आपके विशिष्ट . के लिए मामले में, आपको with conn: . का उपयोग करने की भी आवश्यकता नहीं है बिल्कुल लाइन; आप डेटाबेस में कोई बदलाव नहीं कर रहे हैं, कहीं भी किसी प्रतिबद्धता की आवश्यकता नहीं है। आप with conn: लाइन (इसके तहत एक कदम के तहत सब कुछ अनइंडेंट करें)। अन्यथा आप संदर्भ प्रबंधक को मैनुअल conn.commit() . से बदल सकते हैं कहीं और।

वैकल्पिक रूप से, आप @contextlib.contextmanager() डेकोरेटर :

from contextlib import contextmanager

@contextmanager
def manage_transaction(conn, *args, **kw):
    exc = False
    try:
        try:
            conn.start_transaction(*args, **kw)
            yield conn.cursor()
        except:
            exc = True
            conn.rollback()
    finally:
        if not exc:
            conn.commit()

और इसे इस तरह इस्तेमाल करें:

with manage_transaction(conn) as cursor:
    # do things, including creating extra cursors

जहां आप connection.start_transaction() कॉल करें




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Android Firebase Auth उपयोगकर्ताओं को MySQL डेटाबेस में सुरक्षित रूप से संग्रहीत करें

  2. MySQL में सूची आइटम की स्थिति कैसे वापस करें

  3. mysqli_query के साथ अजाक्स फॉर्म सत्यापन

  4. MySQL एक तालिका से दूसरे के रिकॉर्ड में मूल्यों को जोड़ता है

  5. क्या मेरे MySQL सर्वर कनेक्शन एन्क्रिप्टेड और सुरक्षित हैं?