2011-06-01 78 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 2011-06-01 05:07:04

+0

因此,没有pyodbc。 – Chuck 2014-09-18 20:19:50