关于mysql游标和迭代器

Posted

技术标签:

【中文标题】关于mysql游标和迭代器【英文标题】:About mysql cursor and iterator 【发布时间】:2011-09-05 23:05:47 【问题描述】:

假设我有一个 mysql 游标和数据读取。数据量可能很大,我想每次处理一行。

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

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

但这看起来不太好,所以我想知道这种方式是否像想象的那样工作:

for row in iter(cursor.fetchall())

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

【问题讨论】:

【参考方案1】:

MySQLdb 游标类实现了iterator protocol,因此您可以简单地这样做:

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

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

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

【讨论】:

无论如何我都可以在 for 循环中获取列名?

以上是关于关于mysql游标和迭代器的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之迭代器模式 Iterator

Java描述设计模式(13):迭代器模式

迭代器模式

设计模式之三:迭代器模式(IteratorPattern)

python 迭代器 一个奇怪的解决方法

java23中设计模式之迭代器模式