当前位置: 首页 > 知识库问答 >
问题:

Python读取sql返回生成器对象

陶高峯
2023-03-14

我使用pyodbc和pandas-read_-sql从Oracle数据库中提取数据。

当我进入这一行时,我没有看到任何错误

df = pd.read_sql(sql_str,cnxn,chunksize=10)

但是当我试着看的时候

df

我得到这个错误

<generator object _query_iterator at 0x092D40F8>

我对这一错误的含义或可能的原因进行了研究,但没有得出令人满意的答案。

使用chunksize的原因是我有一个包含6000万行的Oracle db表,并计划以位的形式下载,然后将它们放在一起,就像这里:如何从sql查询创建一个大数据帧而不耗尽内存?

共有2个答案

沃学
2023-03-14

我想发表评论,但现在还不能。无论如何,这不是一个告诉您df是生成器对象的错误。

太叔昊穹
2023-03-14

正如chunksize的解释所说,当指定时,它返回一个迭代器,其中chunksize是每个块中包含的行数。
所以您可以迭代结果,并对每个块做一些事情:

for chunk in pd.read_sql_query(sql_str, engine, chunksize=10):
    do_something_with(chunk)

通常,您可以处理块并将其添加到列表中,然后在此之后,循环将此列表中所有已处理的块放在一起。

另请参见有关sql查询的文档:http://pandas.pydata.org/pandas-docs/stable/io.html#querying 举个例子。

 类似资料:
  • 我正在开发我的第一个FastAPI和Pydantic项目,在尝试从endpoint返回生成器时遇到了一个问题。问题在下面,任何投入都将不胜感激! 我有一个 API endpoint,我首先从数据库中获取数据记录,然后使用 map 函数格式化每条记录。但是,将映射结果返回到终结点时,键值映射出错。请注意,出于性能考虑(大数据量),我想将endpoint的返回类型保留为生成器。 我的伪代码: 这样,我

  • 是否有方法重写build方法返回SampleClass以避免执行build.build?

  • 生成器返回值 PHP7支持通过Generator::getReturn获取生成器方法return的返回值。 PHP5中我们约定使用Generator最后一次yield值作为返回值。 <?php final class AsyncTask { public function begin() { return $this->next(); } //

  • 问题内容: 这可能是一个愚蠢的问题,但是我还是会问。我有一个生成器对象: 我可以测量它的大小: 据说发电机会被消耗掉: …但保持不变。 使用字符串可以按我的预期工作: 如果有人能启发我,我将不胜感激。 问题答案: 不按照您的想法去做。该方法返回给定对象的内部大小(以字节为单位),而不是生成器将要返回的项目数。 Python无法事先知道生成器的大小。以下面的无限生成器为例(例如,有更好的方法来创建计

  • 问题内容: 我的Python程式中有这个功能: 我知道 是一个发电机。但是我会将value变量返回给调用该函数的处理程序。这可能吗?我能怎么做? 问题答案: 您不能在Python 2或Python 3.0-3.2中使用值来退出生成器。您需要使用 不 带表达式的加号: __ 在循环本身中,再次使用: 替代方法是引发异常或使用龙卷风回调。 在Python 3.3和更高版本中,生成器函数中带有值会导致该

  • 前面章节中,已经详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它比较特殊。 以 list 容器为例,在使用该容器迭代一组数据时,必须事先将所有数据存储到容器中,才能开始迭代;而生成器却不同,它可以实现在迭代的同时生成元素。 也就是说,对于可以用某种算法推算得到的多个数据,生成器并不会一次性生成它们,而是什么时候需要,才什么时候生成。 不仅如此,生成器的创建方式也比迭代器简单很多,大体分为以下