SQLite:如何将查询结果保存为CSV文件?

Ray*_*ess 144 csv sqlite

我是SQLite的新手.有没有办法可以将查询结果导出到CSV文件中?

gdw*_*dw2 228

这里和d5e5的评论:

您必须将输出切换到csv-mode并切换到文件输出.

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
Run Code Online (Sandbox Code Playgroud)

  • 它打印到标准输出,即您的屏幕可能.要在文件中保存输出:sqlite> .output test.csv要将打印结果恢复到屏幕:sqlite> .output stdout (31认同)
  • 这个文件在哪里保存? (3认同)
  • 要在“.mode csv”之后返回默认模式,请输入“.mode list”(或退出并重新启动) (3认同)
  • 如果要使用特定路径,请使用sqlite> .output C:/Users/jdoe/Documents/output.csv. (2认同)

小智 135

要在csv文件中包含列名,可以执行以下操作:

sqlite> .headers on
sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
Run Code Online (Sandbox Code Playgroud)

要验证您所做的更改,可以运行以下命令:

sqlite> .show
Run Code Online (Sandbox Code Playgroud)

输出:

echo: off   
explain: off   
headers: on   
mode: csv   
nullvalue: ""  
output: stdout  
separator: "|"   
stats: off   
width: 22 18 
Run Code Online (Sandbox Code Playgroud)

  • 感谢您展示如何获取列名称!这个答案需要更高. (3认同)
  • 请注意,sqlite3 将输出附加到文件末尾,而不删除先前的内容。 (2认同)
  • 但是每次`.output filename.csv` 执行都会创建或删除文件。 (2认同)

小智 23

gdw2和d5e5的答案很好.为了使它更简单,这些建议在一系列命令中汇集在一起​​:

sqlite> .mode csv
sqlite> .output test.csv
sqlite> select * from tbl1;
sqlite> .output stdout
Run Code Online (Sandbox Code Playgroud)


小智 21

除了上述答案,您还可以使用.once类似的方式.output.这输出指定文件的下一个查询,因此您不必遵循.output stdout.

所以在上面的例子中

.mode csv
.headers on
.once test.csv
select * from tbl1;
Run Code Online (Sandbox Code Playgroud)


Pow*_*ers 9

所有现有的答案只能在 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)
Run Code Online (Sandbox Code Playgroud)

您可以自定义查询以仅将部分 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)
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解更多信息。


Ale*_*xis 7

或者,您可以在一行中完成(在 win10 中测试)

sqlite3 -help
sqlite3 -header -csv db.sqlite 'select * from tbl1;' > test.csv
Run Code Online (Sandbox Code Playgroud)

奖励:将 powershell 与 cmdlet 和管道 (|) 一起使用。

get-content query.sql | sqlite3 -header -csv db.sqlite > test.csv
Run Code Online (Sandbox Code Playgroud)

其中 query.sql 是包含 SQL 查询的文件