关于MySQL游标和迭代器
假设我有一个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)