24

mysql カーソルとデータの読み取りがあるとします。データ量が非常に大きく、毎回 1 行ずつ処理したい場合があります。

簡単で簡単な方法は次のようになります。

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

しかし、これは見栄えが悪いので、この方法が想像どおりに機能するかどうかは疑問です。

for row in iter(cursor.fetchall())

私が知りたいのは、このiter(cursor.fetchall())方法を使用する場合、最初にすべてのデータをフェッチするのか、それとも一度に 1 行ずつフェッチするのかということです。

4

1 に答える 1

48

MySQLdbカーソル クラスはiterator プロトコルを実装しているため、次のように簡単に実行できます。

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

MySQLdb.cursors.BaseCursorからの関連コード:

def __iter__(self):
    return iter(self.fetchone, None)
于 2011-06-01T03:36:54.683 に答える