Mysqlカーソルとデータを読み取ったと想像してください。データ量が非常に多いので、毎回1行処理したいと思います。
簡単で簡単な方法は次のようになります。
_while True:
row = cursor.fetchone()
if not row: break
.....
_
しかし、これは見栄えがよくないので、この方法が想像どおりに機能するかどうか疑問に思います。
_for row in iter(cursor.fetchall())
_
私が知りたいのは、iter(cursor.fetchall())
の方法を使用する場合、最初にすべてのデータをフェッチするのか、それとも一度に1行だけをフェッチするのかということです。
どんなアイデアでも大歓迎です。
どうも
MySQLdb
カーソルクラスは イテレータプロトコル を実装しているため、次のように簡単に実行できます。
cursor.execute(sql)
for row in cursor:
print row
...
MySQLdb.cursors.BaseCursor からの関連コード:
def __iter__(self):
return iter(self.fetchone, None)