使用 Python 3 将文件(由 Postgres 创建)批量加载到内存中的 SQLite 数据库的最快方法是什么?

What is the fastest way to bulk load a file (created by Postgres) into an in-memory SQLite database using Python 3?

我有一个大型数据集要加载到 SQLite 内存数据库中。我计划从从 Postgres 导出的文件中加载数据。哪种文件格式和加载机制最快?

目前我在考虑以下两个方案:

哪个更快?也许还有第三种更快的选择?

这将作为 Python 3 脚本的一部分完成。这会影响选择吗?

如果没有人对此有任何经验,我会确保 post 基准测试作为稍后的答案。

编辑:这个问题得到了反对票。从评论来看,这似乎是由于缺乏基准测试。如果没有,请让我知道如何改进这个问题。我绝对不希望有人为我执行基准测试。我只是希望有人有过批量加载到 SQLite.

的经验

事实证明,使用 pg_dump 并以高效的方式插入语句并没有很好的方法来做到这一点。当我们使用 CSV 和 pg_dump 策略时,我们最终都从源文件中逐行插入。我们将使用 CSV 方法使用 executemany.

每批加载 10000 行
import sqlite3
from datetime import datetime
import csv

conn = sqlite3.connect(":memory:")
cur = conn.cursor()
create_query = """
    CREATE VIRTUAL TABLE my_table USING fts4(
        id INTEGER,
        my_field TEXT
    );
"""
cur.execute(create_query)

csv.field_size_limit(2147483647)

from_time = datetime.now()
with open('test.csv', 'r', encoding="utf8") as file:
    csv_file = csv.reader(file)
    header = next(csv_file)
    query_template = """
        INSERT INTO my_table (id, my_field) 
        VALUES (?, ?);
    """
    for batch in split_iterable_by_size(csv_file, 10000):
        cur.executemany(query_template, batch)
        conn.commit()  

在我们的系统和数据集上,这需要 2 小时 30 分钟。我们没有测试替代方案。