两种方法都返回查询返回项的列表,我在这里错过了吗?
还是它们确实具有相同的用法?
在性能方面有任何差异吗?
如果使用默认光标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)
基本上是相同的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句