当前位置: 首页 > 面试题库 >

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

岳和泽
2023-03-14
问题内容

这两种方法都返回查询返回项的列表,我在这里错过了吗?
还是它们确实具有相同的用法?
在性能方面有任何差异吗?


问题答案:

如果使用默认光标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)基本上是相同的。



 类似资料:
  • 问题内容: 考虑以下代码片段: 我期望创建一个具有以下两个功能的字典: 但看起来生成的两个函数完全相同: 我真的不明白为什么。你有什么建议吗 ? 问题答案: 你需要为创建的每个函数绑定。一种方法是将其作为具有默认值的参数传递: 现在,函数内部的使用了参数,即使它具有相同的名称,并且在创建函数时会评估该参数的默认值。为了帮助你看到以下内容: 请记住默认值是如何工作的,例如可变对象(如列表和字典)的工

  • 问题内容: OpenCV python包装器中是否有任何功能与OpenCV 2中Mat的convertTo方法具有相同的功能? 我基本上想在python中调用此函数 哪里是灰度图像。 我已经通过将dst参数保持为CV_32FC1类型来使用cv.ConvertScale,但是我正在尝试使python代码尽可能与cv2保持一致。有什么线索吗? 问题答案: 您可以为此简单地使用Numpy函数。 例如:

  • 问题内容: 现在,我将elixir与mysql数据库一起使用,并将redispy与redis一起使用,并在所有位置选择UTF-8。我想用中文写一些数据,但是我得到的是这样的: 在我将该字典存储到redis并通过redispy将其取出后,它变为: 我知道如果我加入之前,并打印它会守我,但有一个功能或另一个解决这个问题? 问题答案: 后者看起来像json,请先尝试对其进行解码:

  • 问题内容: 你好,我有两个python文件(命名管道) py 该管道创建一个命名管道“ test_pipe”,并将数据写入该管道。 b.py 我能够毫无问题地获取数据。但是我得到的数据是这种形式的(我已经用双引号括住了输出) 我无法弄清楚为什么所有这些变量都被打印(<,0,>)在a.py或b.py中的问题在哪里以及如何解决这个问题。 问题答案: 这就是回报。它返回结果和读取数据的元组。您应该验证结

  • 我现在需要用python编写一个接收器程序,我想知道我做错了什么。在java中,我有(显然是代码片段): 它返回的值为: 如果我打印出数组字节文件大小,我会得到以下值: 这会返回: 我在python端接收这两个值(通过数据报发送给python接收器)。如何组合它们或将它们转换为值27762,就像Java中的BigInteger返回值一样?有点迷茫了。 任何想法都会很棒! 提前感谢!

  • 断言是一种完整性检查,您可以在完成程序测试后打开或关闭。 想到断言的最简单方法是将它比作一个raise-if语句(或者更准确,即使是if-if-not语句)。 测试表达式,如果结果为false,则引发异常。 断言由assert语句执行,这是Python的最新关键字,在1.5版中引入。 程序员经常在函数的开头放置断言以检查有效输入,并在函数调用之后检查有效输出。 The assert 语句 遇到as