2011-06-01 15 views
19

कल्पना कीजिए कि मेरे पास एक MySQL कर्सर और डेटा पढ़ा गया है। डेटा की मात्रा बहुत बड़ी हो सकती है कि मैं हर बार एक लाइन से निपटना चाहता हूं।mysql कर्सर और इटरेटर

एक आसान और सीधे आगे रास्ता इस तरह हो सकता है:

while True: 
    row = cursor.fetchone() 
    if not row: break 
    ..... 

लेकिन यह अच्छा नहीं लगता है, तो मुझे आश्चर्य है कि इस तरह से काम करता है कि क्या कल्पना के रूप में:

for row in iter(cursor.fetchall()) 

बात मैं जानना चाहते हैं: अगर मैं iter(cursor.fetchall()) तरीके का उपयोग करता हूं, तो क्या यह पहले सभी डेटा लाता है या यह एक समय में केवल एक पंक्ति लाता है?

किसी भी विचार की सराहना की जाती है।

THX

उत्तर

43

MySQLdb कर्सर वर्ग iterator protocol लागू करता है, तो आप बस यह कर सकते हैं:

cursor.execute(sql) 
for row in cursor: 
    print row 
    ... 
MySQLdb.cursors.BaseCursor से

प्रासंगिक कोड:

def __iter__(self): 
    return iter(self.fetchone, None) 
+0

बहुत उपयोगी है, धन्यवाद – taijirobot2

+0

तो करता है pyodbc। – Chuck

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