在Python中读取和写入大量数据

问题描述:

我试图从数据库中检索大量数据(超过700万)并尝试保存一个s平面文件。数据正在使用python代码(python调用存储过程)进行检索。但我在这里遇到问题。这个过程消耗了大量的内存,因此unix机器会自动杀死这个进程。我正在使用read_sql_query读取数据并将to_csv写入平面文件。所以,我想问问是否有办法解决这个问题。可能一次只读取几千行,并保存它们并转到下一行。 我甚至还使用了chunksize参数。但似乎没有解决这个问题。在Python中读取和写入大量数据

任何帮助或建议将不胜感激。

+0

您使用的是什么RDBMS?大多数都有CSV方法。 – Parfait

当您在read_sql_query中使用chunksize时,您可以遍历结果以避免一次将所有内容加载到内存中。但是,您还必须以块的形式写入CSV文件,以确保您不只是将查询结果复制到块中的新的,庞大的DataFrame块中。小心只写一次列标题。下面是使用熊猫的例子:

import pandas as pd 

dbcon = ... # whatever 

with open("out.csv", "w") as fh: 
    chunks = pd.read_sql_query("SELECT * FROM table_name", dbcon, chunksize=10000) 
    next(chunks).to_csv(fh, index=False) # write the first chunk with the column names, 
              # but ignore the index (which will be screwed up anyway due to the chunking) 
    for chunk in chunks: 
     chunk.to_csv(fh, index=False, header=False) # skip the column names from now on 

您不必写CSV时,如果你明确地呼叫建立index_colread_sql_query忽略指数。

+0

非常感谢。这正是我所期待的。感谢你的帮助。 –

不是使用熊猫库,而是直接建立数据库连接(根据需要使用psycopg2,pymysql,pyodbc或其他连接器库)并使用Python的db-api同时读取和写入行,或者一个接一个或以任何大小的块来处理。