2010-01-09 11 views
13

cx_Oracle (या सामान्य रूप से ओरेकल) में, प्रत्येक क्वेरी के लिए कर्सर आवंटित करना, या कई प्रश्नों में कर्सर का पुन: उपयोग करना संभव है।एक नया कर्सर बनाम कर्सर बनाम पुन: उपयोग करने के ट्रेडऑफ क्या हैं?

def getSomeData(curs):   # case 1: pass in a cursor, which is generally 
    curs.execute('select ...') #   reused across queries 
    return curs.fetchall() 

def getSomeData(conn):   # case 2: pass in a connection,allocate 
    curs=conn.cursor()   #   a cursor for this query 
    curs.execute('select ...') 
    return curs.fetchall() 

बेशक, दोनों दृष्टिकोण एक ही डेटा लौटाते हैं।

दोनों दृष्टिकोणों के बीच व्यापार क्या हैं? क्या एक विशेष रूप से कम या ज्यादा कुशल है? क्या कई प्रश्नों पर कर्सर का पुन: उपयोग करने के लिए कोई संभावित नुकसान है?

उत्तर

9

आप जितना चाहें उतना सीएक्स_ऑरेकल कर्सर का पुनः उपयोग कर सकते हैं, कोई समस्या नहीं। यदि आप समय की एक छोटी सी जगह में हजारों छोटे प्रश्नों को निष्पादित कर रहे हैं, तो आप कर्सर को दोबारा उपयोग करके थोड़ा प्रदर्शन सुधार देखेंगे, लेकिन मुझे शक है।

मैं कभी-कभी नए कर्सर बनाउंगा, और दूसरी बार किसी मौजूदा कोड का पुन: उपयोग कर सकता हूं, इस पर निर्भर करता है कि यह कोड को पढ़ने और समझने में आसान बनाता है या नहीं।

उदाहरण के लिए, यदि मेरे पास विभिन्न प्रकार की प्रक्रियाएं हैं जिन्हें डेटाबेस तक पहुंचने की आवश्यकता है, तो मैं उस ओरेकल कनेक्शन ऑब्जेक्ट को पास कर सकता हूं, या उस कनेक्शन पर बनाए गए कर्सर को पास कर सकता हूं।

जो कुछ भी आपके कोड को और अधिक पढ़ने योग्य और बनाए रखने में आसान बनाता है वह है जो मैं चाहता हूं।

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