关于MySQL的游标和迭代器

24

假设我有一个MySQL游标和读取的数据。数据可能非常庞大,我希望每次处理一行。

一个简单直接的方式可能是这样的:

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

但这样看起来并不好,因此我想知道这种方法是否像预期的那样工作:

for row in iter(cursor.fetchall())

我想知道的是:如果我使用iter(cursor.fetchall())这种方式,它是先一次性获取所有数据还是逐行获取数据?

1个回答

49

MySQLdb 的游标类实现了迭代器协议,所以你可以这样做:

cursor.execute(sql)
for row in cursor:
    print row
    ...

来自MySQLdb.cursors.BaseCursor的相关代码:

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

有没有办法在for循环中获取列名? - user2549538

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接