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



我想在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
...

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

下面是您的代码的样子。

此外,sqlite还可以导入CSV文件。

Sqlite每秒可以进行数万次插入,只需确保在一个事务中完成所有插入,方法是用BEGIN和COMMIT包围插入。(execute()会自动执行此操作。)

和往常一样,在你知道速度会成为问题之前不要进行优化。首先测试最简单的解决方案,只有在速度不可接受时才进行优化。

最新更新