मुझे लगता है कि यहां एक लेन-देन के बारे में गलतफहमी है।
आपका उदाहरण एक कनेक्शन खोलता है, फिर एक निष्पादित करता है उस पर लेनदेन। आप उस लेन-देन में एकाधिक SQL कथन निष्पादित करते हैं, लेकिन आप इसे पूरी तरह से बंद करने के बाद बंद कर देते हैं। बेशक यह बहुत अच्छा है।
अनेक लेन-देन निष्पादित करना (केवल SQL कथन के विपरीत), ऐसा दिखता है:
conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")
for j in range(10):
try:
for i in range(10):
cur = conn.cursor()
query = "DELETE FROM SomeTable WHERE ID = %d" % i
cur.execute(query)
cur.close()
conn.commit()
except Exception:
conn.rollback()
conn.close()
उपरोक्त कोड 10 लेनदेन करता है, प्रत्येक में 10 अलग-अलग डिलीट स्टेटमेंट होते हैं।
और हाँ, आप बिना किसी समस्या के उसके लिए खुले कनेक्शन का पुन:उपयोग करने में सक्षम होना चाहिए, जब तक कि आप उस कनेक्शन को थ्रेड्स के बीच साझा नहीं करते।
उदाहरण के लिए, SQLAlchemy आवेदन के लिए आवश्यकतानुसार खुले कनेक्शन सौंपकर, उन्हें पूल करके कनेक्शन का पुन:उपयोग करता है। एप्लिकेशन के बंद होने तक बंद किए बिना, एप्लिकेशन के पूरे जीवनकाल में इन कनेक्शनों पर नए लेनदेन और नए विवरण निष्पादित किए जाते हैं।