如果使用默认光标a MysqLdb.cursors.Cursor
,则 在完成时,整个结果集将存储在客户端 (即,在python列表中)cursor.execute()
。
因此,即使您使用
for row in cursor:
您将不会减少任何内存占用。整个结果集已经存储在列表中(请参见self._rows
MysqLdb / cursors.py)。
但是,如果您使用SSCursor或SSDictCursor:
import MysqLdb
import MysqLdb.cursors as cursors
conn = MysqLdb.connect(..., cursorclass=cursors.SSCursor)
然后 将结果集存储在服务器 MysqLd中。现在你可以写
cursor = conn.cursor()
cursor.execute('SELECT * FROM HUGETABLE')
for row in cursor:
print(row)
并且将从服务器中逐行提取行,因此不需要Python首先构建庞大的元组列表,从而节省了内存。
否则,正如其他人已经指出的那样,cursor.fetchall()
并且list(cursor)
基本上是相同的。