通过Python向Sqlite插入数十亿数据

问题描述 投票:0回答:1

我想将数十亿个值(汇率)插入到 sqlite 数据库文件中。我想使用线程,因为它需要很多时间,但线程池循环多次执行相同的第 n 个元素。我的方法开头有一个 print 语句,它会打印多次而不是一次。

pool = ThreadPoolExecutor(max_workers=2500)

def gen_nums(i, cur):
    global x
    print('row number', x, ' has started')
    gen_numbers = list(mydata)
    sql_data = []
    for f in gen_numbers:
        sql_data.append((f, i, mydata[i]))
    cur.executemany('INSERT INTO numbers (rate, min, max) VALUES (?, ?, ?)', sql_data)
    print('row number', x, ' has finished')
    x += 1


with conn:
    cur = conn.cursor()
    for i in mydata:
        pool.submit(gen_nums, i, cur)

pool.shutdown(wait=True)

输出为:

row number 1  has started
row number 1  has started
row number 1  has started
row number 1  has started
row number 1  has started
row number 1  has started
row number 1  has started
...
python sqlite
1个回答
2
投票

使用生成器表达式将数据动态划分为块,在事务内进行插入。

这里您的代码可能是什么样子。

此外,sqlite 还能够导入 CSV 文件。

Sqlite 每秒可以执行数十数千次插入,只需确保通过使用 BEGIN 和 COMMIT 包围插入来在单个事务中完成所有这些操作。 (executemany() 自动执行此操作。)

一如既往,在知道速度会成为问题之前不要进行优化。首先测试最简单的解决方案,仅在速度无法接受时进行优化。

© www.soinside.com 2019 - 2024. All rights reserved.