首页 > 解决方案 > 如何在 Python Pandas 中查询和导出大数据集

问题描述

我在 Amazon RDS 中有 SQL Server 数据库表,并且在 AWS EC2 中的 8 GB 服务器上运行 python 脚本。python 代码简单地选择一个大表中的所有数据并尝试将其转换为 EC2。即使我尝试每年提取数据,EC2 实例也会很快耗尽内存,但是我希望将所有数据提取到 csv 中(我不一定需要使用 Pandas)

截至目前,熊猫数据框代码非常简单

query= 'select * from table_name'
df = pd.read_sql(query,cnxn)
df.to_csv(target_name, index=False)

我看到的错误是

Traceback(最近一次调用最后一次):df = pd.read_sql(query,cnxn)
MemoryError

标签: pythonmysqlpython-3.xpandas

解决方案


您将希望在此处使用 SQL 数据库的本机管理工具而不是 Python/Pandas。

  • 如果是 MySQL 数据库,
    mysql ... --batch --execute='select * from table_name' > my-file.csv
  • 如果它是一个 PostgreSQL 数据库,在里面psql做类似的事情
    \copy (select * from table_name) To './my-file.csv' With CSV
  • 如果是 SQL Server,(通过这里)
    sqlcmd -S MyServer -d myDB -E -Q "select * from table_name" -o "my-file.csv" -h-1 -s"," -w 700

但是,如果您确实使用 Pandas,则可能可以摆脱chunksize参数(如果内存不足,请进行相应调整):

with open('my_csv.csv', 'w') as f:
    for i, partial_df in enumerate(pd.read_sql(query, cnxn, chunksize=100000)):
        print('Writing chunk %s' % i)
        partial_df.to_csv(f, index=False, header=(i == 0))

推荐阅读