有没有办法将查询结果导出到 CSV 文件中?
从这里和d5e5的评论得知:
您需要将输出切换到csv模式并切换到文件输出。
sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
.mode csv
后返回默认模式,请键入.mode list
(或退出并重新启动)。 - biscuit314要将列名包含在您的 CSV 文件中,您可以执行以下操作:
sqlite> .headers on
sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
为了验证您所做的更改,您可以运行此命令:
sqlite> .show
输出:
echo: off
explain: off
headers: on
mode: csv
nullvalue: ""
output: stdout
separator: "|"
stats: off
width: 22 18
.output filename.csv
命令都会创建或删除该文件。 - kupgov除了上述的答案,您还可以像使用 .output
一样使用 .once
。这仅将下一个查询输出到指定文件中,因此您不必跟随 .output stdout
。
所以在上面的例子中,
.mode csv
.headers on
.once test.csv
select * from tbl1;
gdw2和d5e5提供了不错的答案。为了让它更简单,以下是将建议汇总为一系列命令:
sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
你也可以在一行中完成它(在Win10中测试过)
sqlite3 -help
sqlite3 -header -csv db.sqlite 'select * from tbl1;' > test.csv
奖励:使用powershell的cmdlet和管道(|)。
get-content query.sql | sqlite3 -header -csv db.sqlite > test.csv
其中 query.sql 是包含您 SQL 查询的文件。
现有的答案只适用于sqlite命令行,如果您想构建可重复使用的脚本,这并不理想。Python可以轻松地构建一个可通过程序执行的脚本。
import pandas as pd
import sqlite3
conn = sqlite3.connect('your_cool_database.sqlite')
df = pd.read_sql('SELECT * from orders', conn)
df.to_csv('orders.csv', index = False)
您可以自定义查询以仅将sqlite表的一部分导出到CSV文件中。
您还可以运行单个命令将所有sqlite表导出到CSV文件:
for table in c.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall():
t = table[0]
df = pd.read_sql('SELECT * from ' + t, conn)
df.to_csv(t + '_one_command.csv', index = False)
更多信息请参见此处。
虽然.mode csv
和.output
(或.once
)命令在SQLite命令行界面(也称为Windows上的sqlite.exe
)中可以正常工作。
如果您不使用CLI,仍然可以借助sqlean-fileio扩展来写入输出文件,使用fileio_append(path, string)
函数。
例如:
create table people(id integer primary key, name text);
insert into people(id, name) values
(11, 'Alice'), (12, 'Bob'), (13, 'Cindy');
select sum(
fileio_append('people.csv', format('%d,%s', id, name) || char('10'))
)
from people;
之后,people.csv
的内容将如下所示:
11,Alice
12,Bob
13,Cindy