您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python中的cursor.fetchall()vs list(cursor)

Python中的cursor.fetchall()vs list(cursor)

如果使用认光标a MysqLdb.cursors.Cursor,则 在完成时,整个结果集将存储在客户端 (即,在python列表中)cursor.execute()

因此,即使您使用

for row in cursor:

您将不会减少任何内存占用。整个结果集已经存储在列表中(请参见self._rowsMysqLdb / 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)基本上是相同的。

python 2022/1/1 18:45:34 有337人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶