2017-02-17 9 views
6

मैं डाटाबेस काम पर भारी जोर देने के साथ हर दिन पाइथन का उपयोग करता हूं।पायथन pyodbc कर्सर बनाम डेटाबेस कर्सर

मेरी मानक शुरू pyodbc का उपयोग

connection_hostname = pyodbc.connect('connection_string') 
cursor_hostname = connection_hostname.cursor() 
command_hostname = 'select * from everything_forever;' 
cursor_hostname.execute('command_hostname') 

की तरह कुछ है और अगर मैं एक नया कर्सर बनाने के बजाय किसी अन्य क्वेरी के लिए कर्सर का पुन: उपयोग करना चाहते हैं की जरूरत है, मैं परिणाम तो जैसे पहले क्वेरी से सेट स्टोर कर सकते हैं :

results_from_query = cursor_hostname.fetchall() 

और उसके बाद आगे बढ़ें।

इस दृष्टिकोण ने अब तक मेरे लिए अच्छा काम किया है।

हाल ही में, मैंने नौकरियों को बदल दिया, और मेरे कुछ नए सहकर्मियों ने आम तौर पर उपरोक्त तकनीक का प्रदर्शन करते समय अपने डीबी के शुरू होने वाले घबराहट के साथ काम करने के लिए जीयूआई का उपयोग किया। उन्हें क्या सेट किया गया कर्सर कीवर्ड था। मैं समझता हूं कि कर्सर डीबी के साथ एक बड़ा नो-नो हैं क्योंकि वे सेट सिद्धांत में स्थापित तर्क को इंगित करते हैं, मेजबान को समानांतरता के निम्न/शून्य स्तर, और आरबीएआर प्रकार के संचालन में धक्का देते हैं, लेकिन मुझे विश्वास नहीं है कि ओडीबीसी कर्सर I ' ऊपर घोषित एम एक कर्सर के समान है जो हम सोचते हैं कि जब हमारे पास हमारे SQL सर्वर इंजीनियरिंग और प्रशासन टोपी हैं।

क्या कोई इन ओडीबीसी कर्सर और SQL सर्वर प्रकार कर्सर के बीच अंतर को समझा सकता है (मान लीजिए कि मैं सही हूं कि वे अलग हैं)?

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

आप क्यों नहीं बस

connection_hostname.execute(command_hostname) 

मुझे लगता है कि एक कनेक्शन होने ODBC कर्सर संरचनाओं के रूप में वे कर रहे हैं कनेक्शन लागत और इस तरह के कम करने के लिए एक ही कनेक्शन के माध्यम से कई कर्सर की इजाजत दी के साथ कुछ है की तरह से सीधे अमल नहीं कर सकते। आधार से रास्ता?

उत्तर

2

डाटाबेस कर्सर को डीबीए द्वारा अविश्वासित और अविश्वासित किया जाता है, आमतौर पर अच्छे कारण के लिए। वे अक्सर प्रदर्शन समस्याओं का स्रोत होते हैं, और एक सेट-आधारित दृष्टिकोण लगभग हमेशा बेहतर होता है।

उदाहरण के लिए http://www.databasejournal.com/features/mssql/article.php/3896206/What-Every-DBA-Ought-to-Know-About-SQL-Server-Cursors-and-Their-Alternatives.htm का कहना है:

"मेरे काम के स्थान पर, कर्सर हमारे एसक्यूएल सर्वर मानकों में प्रतिबंधित हैं, ताकि एक कर्सर का उपयोग करने के लिए हम साबित होता है कि कर्सर के प्रदर्शन के प्रसंस्करण की तुलना में बेहतर है। पंक्तियों का एक और तरीका है। "

अधिक सरल बनाने के लिए, आप अपने घबराहट मित्रों को समझा सकते हैं कि एक पाइथन कर्सर वास्तव में अन्य भाषाओं के लिए एक पर्याय है जो रिकॉर्डसेट या परिणामसेट कहता है, और उनके जीयूआई उपकरण कर्सर/रिकॉर्डसेट का भी उपयोग कर रहे हैं (लेकिन डीबी पर कर्सर नहीं बना रहा है!)।

difference between cursor and connection objects

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