pandas 为什么通过SQLite命令行shell导出查询结果这么慢?

vohkndzv  于 2023-08-01  发布在  SQLite
关注(0)|答案(1)|浏览(127)

为了将查询结果(约4500万条记录)导出到CSV文件,我使用命令行shell:

$ sqlite3 db.db3
> .headers on
> .mode csv
> .once result.csv
> select .....

字符串
这花了大约9个小时来运行。我使用Python:

import sqlite3
import pandas as pd

conn = sqlite3.connect('db.db3')
df = pd.read_sql(query, conn)
df.to_csv('output.csv')


这花了大约20分钟。我理解为什么Python可能会快一点,但没有想到会有如此巨大的差异。为什么SQLite命令行shell这么慢?

yjghlzjz

yjghlzjz1#

我在SQLite forum上得到了帮助。
似乎CLI方法的大部分运行时间都是串行磁盘I/O。如果我们可以先将整个查询加载到内存中,然后再写入,那么写入时间将是相当的。
下面是一个如何做到这一点的例子:

$ sqlite3 db.db3
> attach database ':memory:' as in_memory;
> create table in_memory.large_result as [insert original query here];
> .mode csv
> .headers on
> .once result.csv
> select * from in_memory.large_result;

字符串

相关问题