如果使用默认光标a
MySQLdb.cursors.Cursor,则 在完成时,整个结果集将存储在客户端
(即,在Python列表中)
cursor.execute()。
因此,即使您使用
for row in cursor:
您将不会减少任何内存占用。整个结果集已经存储在列表中(请参见
self._rowsMySQLdb / cursors.py)。
但是,如果您使用SSCursor或SSDictCursor:
import MySQLdbimport MySQLdb.cursors as cursorsconn = 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)基本上是相同的。



