在Python中读取和写入大量数据
我试图从数据库中检索大量数据(超过700万)并尝试保存一个s平面文件。数据正在使用python代码(python调用存储过程)进行检索。但我在这里遇到问题。这个过程消耗了大量的内存,因此unix机器会自动杀死这个进程。我正在使用read_sql_query读取数据并将to_csv写入平面文件。所以,我想问问是否有办法解决这个问题。可能一次只读取几千行,并保存它们并转到下一行。 我甚至还使用了chunksize参数。但似乎没有解决这个问题。在Python中读取和写入大量数据
任何帮助或建议将不胜感激。
当您在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_col
到read_sql_query
忽略指数。
非常感谢。这正是我所期待的。感谢你的帮助。 –
不是使用熊猫库,而是直接建立数据库连接(根据需要使用psycopg2,pymysql,pyodbc或其他连接器库)并使用Python的db-api同时读取和写入行,或者一个接一个或以任何大小的块来处理。
您使用的是什么RDBMS?大多数都有CSV方法。 – Parfait