首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在不耗尽内存的情况下从sql查询创建一个大型的pandas数据帧?

如何在不耗尽内存的情况下从sql查询创建一个大型的pandas数据帧?
EN

Stack Overflow用户
提问于 2013-08-07 23:50:02
回答 4查看 89.9K关注 0票数 60

我在查询MS SQL Server数据库中超过500万条记录的表时遇到问题。我想选择所有的记录,但是在内存中选择太多数据时,我的代码似乎失败了。

这是可行的:

代码语言:javascript
复制
import pandas.io.sql as psql
sql = "SELECT TOP 1000000 * FROM MyTable" 
data = psql.read_frame(sql, cnxn)

...but这不起作用:

代码语言:javascript
复制
sql = "SELECT TOP 2000000 * FROM MyTable" 
data = psql.read_frame(sql, cnxn)

它返回以下错误:

代码语言:javascript
复制
File "inference.pyx", line 931, in pandas.lib.to_object_array_tuples
(pandas\lib.c:42733) Memory Error

我在here上读到,从csv文件创建dataframe时也存在类似的问题,解决方法是使用'iterator‘和'chunksize’参数,如下所示:

代码语言:javascript
复制
read_csv('exp4326.csv', iterator=True, chunksize=1000)

对于SQL数据库的查询,有没有类似的解决方案?如果不是,首选的解决方法是什么?我是否应该使用其他方法来读取块中的记录?我读过一些关于在pandas中处理大型数据集的讨论here,但执行SELECT *查询似乎有很多工作要做。当然还有一种更简单的方法。

EN

回答 4

Stack Overflow用户

发布于 2015-04-09 02:22:49

正如评论中提到的,从pandas 0.15开始,您可以在read_sql中使用chunksize选项逐个读取和处理查询块:

代码语言:javascript
复制
sql = "SELECT * FROM My_Table"
for chunk in pd.read_sql_query(sql , engine, chunksize=5):
    print(chunk)

参考:http://pandas.pydata.org/pandas-docs/version/0.15.2/io.html#querying

票数 65
EN

Stack Overflow用户

发布于 2019-08-27 00:44:41

代码解决方案和备注。

代码语言:javascript
复制
# Create empty list
dfl = []  

# Create empty dataframe
dfs = pd.DataFrame()  

# Start Chunking
for chunk in pd.read_sql(query, con=conct, ,chunksize=10000000):

    # Start Appending Data Chunks from SQL Result set into List
    dfl.append(chunk)

# Start appending data from list to dataframe
dfs = pd.concat(dfl, ignore_index=True)

然而,我的内存分析告诉我,即使在提取每个块之后释放内存,列表也会越来越大,并占用该内存,从而导致在空闲RAM上没有净收益。

我想听听作者/其他人有什么要说的。

票数 10
EN

Stack Overflow用户

发布于 2021-11-19 21:42:19

我找到的处理此问题的最佳方法是利用SQLAlchemy steam_results连接选项

代码语言:javascript
复制
conn = engine.connect().execution_options(stream_results=True)

并将conn对象传递给pandas

代码语言:javascript
复制
pd.read_sql("SELECT *...", conn, chunksize=10000)

这将确保在服务器端而不是客户端处理游标

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18107953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档