2011-03-31 21 views
31

यदि मैं MySQLdb का उपयोग Python के माध्यम से MySQL-Server से कनेक्ट करने के लिए करता हूं। मैं एक कनेक्शन और एक कर्सर बनाता हूं जैसेपायथन MySQLdb: connection.close() वीएस। कर्सर.क्लोज़()

connection = MySQLdb.connect(...) 
cursor = connection.cursor() 
# process 

जब MySQL-प्रसंस्करण किया जाता है तो कनेक्शन को बंद करना चाहिए। अब मैं सोच रहा था: यह bydoing

connection.close() 

कनेक्शन बंद करने के लिए या मैं कनेक्शन पहले कर्सर को बंद करने और उसके बाद करने के लिए क्या पर्याप्त है? इस तरह:

cursor.close() 
connection.close() 
+0

एक संबंधित नोट पर, क्या कर्सर को बंद करना ठीक है, कनेक्शन नहीं? –

+0

संभावित डुप्लिकेट [MySQLdb का उपयोग कर कर्सर को बंद करने के लिए] (http://stackoverflow.com/questions/5669878/when-to-close-cursors-using-mysqldb) –

उत्तर

-12

कम सोचें। अधिक उपकरण का प्रयोग करें।

from contextlib import closing 
with closing(connection.cursor()) as cursor: 
    ... use the cursor ... 

# cursor closed. Guaranteed. 

connection.close() 
+4

तब कर्सर को कब बंद किया जाना चाहिए? – accuya

+71

हो सकता है कि यह स्पष्ट रूप से प्रश्न का उत्तर देना बेहतर होगा ताकि लोग यह जानने के बिना उपकरण का उपयोग न करें कि यह क्या कर रहा है और क्यों। कैसे 'अधिक सोचें, लेकिन सुविधा के लिए उपकरण का उपयोग करें' के बारे में कैसे? – BillR

+0

धन्यवाद! मैं कनेक्शन उत्तर के कारण लंबे समय से इस उत्तर की तलाश कर रहा था() काम नहीं करता है। –

2

इस कनेक्शन को बंद करना इस विशेष संदर्भ में पर्याप्त होना चाहिए। यदि आप एकाधिक कर्सर आदि के साथ काम कर रहे हैं तो आपको उचित संसाधन प्रबंधन की परवाह करने की आवश्यकता है।

+2

क्या आप और विस्तार कर सकते हैं? – Flimm

8

जितनी जल्दी हो सके कर्सर को बंद करना शायद सबसे अच्छा शर्त है, क्योंकि अब आपके पास इसका कोई उपयोग नहीं है। हालांकि, मैंने कुछ भी नहीं देखा है जहां डीबी कनेक्शन के बाद इसे बंद करना हानिकारक है। लेकिन आप के रूप में सेट कर सकते हैं के बाद से:

cursor = conn.cursor() 

मैं इससे पहले कि यह बंद करने की सलाह देते हैं, मामले में आप गलती से इसे फिर से आवंटित और डीबी कनेक्शन बंद कर दिया है के रूप में यह एक त्रुटि फेंक होगा। इसलिए आप बंद कनेक्शन के साथ आकस्मिक पुन: असाइनमेंट को रोकने के लिए पहले को बंद करना चाहेंगे।

(कुछ भी यह बंद नहीं करते सब पर है जैसे कि यह कचरा कलेक्टर द्वारा एकत्र हो जाता है (देखें: In Python with sqlite is it necessary to close a cursor?))

संदर्भ: When to close cursors using MySQLdb

In Python with sqlite is it necessary to close a cursor?

संबंधित मुद्दे