我正在尝试将我的 Postgres 数据库中的表格读入 Python。表大约有 800 万行和 17 列,在数据库中的大小为 622MB。
我可以使用 psql 将整个表导出到 csv,然后使用 pd.read_csv() 将其读入。它工作得很好。 Python 进程只使用大约 1GB 的内存,一切都很好。
现在,我们需要完成的任务需要这个拉取自动化,所以我想我可以直接从数据库中使用 pd.read_sql_table() 读取表。使用以下代码
import sqlalchemy
engine = sqlalchemy.create_engine("postgresql://username:password@hostname:5432/db")
the_frame = pd.read_sql_table(table_name='table_name', con=engine,schema='schemaname')
这种方法开始使用大量内存。当我使用任务管理器跟踪内存使用情况时,我可以看到 Python 进程内存使用情况不断攀升,直到它一路上升到 16GB 并卡住计算机。
任何关于为什么会发生这种情况的想法都将受到赞赏。
最佳答案
您需要设置 chunksize
参数,以便 pandas 迭代较小的数据 block 。看到这个帖子:https://stackoverflow.com/a/31839639/3707607
关于python - Pandas 使用 read_sql_table 占用过多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253326/