【问题标题】:About mysql cursor and iterator关于mysql游标和迭代器
【发布时间】: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()) 方式,它是先获取所有数据还是一次只获取一行?

【问题讨论】:

    标签: python mysql database-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 循环中获取列名?
    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 2021-10-16
    • 2021-11-12
    • 2013-11-23
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多