如何在python中将大CSV文件导入Sqlite3?

时间:2017-12-05 08:21:13

标签: python csv sqlite

我有一个非常大的CSV文件,我需要加载到sqlite3中的表中。我无法将整个CSV内容作为变量加载到RAM中,因为数据非常大,该事件定义了每列不能容纳64 GB RAM的类型。

我曾尝试使用numpy和pandas来加载和转换数据,但仍然超过了RAM限制。

我想以某种方式一次读取CSV 1行(或以较小的批次)并逐步将它们保存到数据库中以保持低RAM使用率。如果可以使用多个CPU核心完成,那将是完美的。

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方案,并结合其他Stack Overflow问题的答案。代码应该是这样的:

import sqlite3
import pandas as pd

def add_to_db(row, con):
    # Function that make insert to your DB, make your own.

def process_chunk(chunk):
    # Handles one chunk of rows from pandas reader.
    con = sqlite3.connect("favorita.db")
    for row in chunk:
        add_to_db(row, con)
    con.commit()

for chunk in pd.read_csv('data.csv', chunksize=100000):
    # Adjust chunksize to your needs and RAM size.
    process_chunk(chunk.values)

这肯定可以进一步调整为使用多线程,但由于数据库中并行执行插入时死机,我无法做到这一点。但如果你有时间,这是一个可靠的解决方案。