Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pymysql从服务器逐个获取行_Python_Pymysql - Fatal编程技术网

Python 使用pymysql从服务器逐个获取行

Python 使用pymysql从服务器逐个获取行,python,pymysql,Python,Pymysql,我有一个返回许多行的查询,由于存在我需要获取的BLOBs,所以每一行都很大 我的质询如下: import pymysql db = pymysql.connect(...) with db.cursor() as cur: cur.execute("select value from my_blobs") for row in cur: ... 我天真地认为,迭代cur,而不是调用fetchall(),可以避免一次获取所有数据并在过程中耗尽内存。然而,我看到的是

我有一个返回许多行的查询,由于存在我需要获取的
BLOB
s,所以每一行都很大

我的质询如下:

import pymysql
db = pymysql.connect(...)
with db.cursor() as cur:
    cur.execute("select value from my_blobs")
    for row in cur:
        ...
我天真地认为,迭代
cur
,而不是调用
fetchall()
,可以避免一次获取所有数据并在过程中耗尽内存。然而,我看到的是,在调用
cur.execute()
期间内存耗尽,也就是说,在我尝试通过
fetchall()
fetchone()
或通过迭代
cur
获得结果之前


我的问题是,我怎样才能一个接一个地得到我的斑点?我是否一定要在应用程序中迭代,并为每个blob进行新的查询?那么,如果在
execute()
期间查询整个数据,那么
fetchone
或对
cur进行迭代有什么用?

默认游标类是缓冲数据。幸运的是,有一个无缓冲版本:
pymysql.cursors.SSCursor
。尝试运行
db.cursor(pymysql.cursors.SSCursor)
而不是
db.cursor()

从:

无缓冲游标,主要用于返回大量数据的查询,或用于通过慢速网络连接到远程服务器

这将根据需要获取行,而不是将每一行数据复制到缓冲区中。这样做的好处是,客户端使用的内存要少得多,当通过慢速网络传输或结果集非常大时,返回行的速度要快得多


您是否收到内存错误?请发布确切的异常消息。在my_blob中有多少记录,这些blob的典型大小是多少?它们是高分辨率图像吗?大文件?尝试将典型大小乘以行大小。如果您的CPU没有足够大的RAM,则会发生内存错误。@Parfait问题本质上是关于是否/为什么在查询过程中检索记录,而不是在记录迭代过程中检索记录,以及如何减轻这一问题。在我的案例中,我的内存不足这一事实是不好的,并提供了一些激励性的背景,但实际上这与问题有些无关,我想关于我的blob包含的内容的细节也是如此。@user1735003这方面有什么好运气吗?我也有同样的问题-它是获取所有,然后才迭代。