SQLite 3 - 有没有办法将数据库文件导出到制表符分隔的文本文件?

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

我的 Linux EC2 服务器中目前有一个 15 GB 的大型数据库 .db 文件。我知道 SQLite 3 可以使用以下命令直接导出到 .csv 文件:

sqlite3 -header -csv ./home/data.db "select * from datafile;" >> out.csv

但是,我想知道是否有一个选项可以将 .db 文件导出到制表符分隔的文本文件中。我查找了 SQLite 3 的文档,但只找到了对 .csv 文件的引用。有人知道我该怎么做吗?非常感谢!

linux sqlite
2个回答
11
投票

当然:

sqlite3 -header -separator " " ./home/data.db \
    "select * from datafile;" > out.txt

应该这样做。

" "
的内容是制表符。您可以从命令行(在
bash
中)键入 if,方法是在其前面加上
Ctrl-v

如果您使用 SQL 脚本,则可以使用

"\t"

.headers on
.mode csv
.separator "\t"
select * from datafile

另请参阅手册,第 5 节。另见手册:

8.6.2。导出到 TSV(制表符分隔值)

可以通过在运行查询之前输入“.mode tabs”来导出到纯 TSV,无需任何字段引用。但是,如果输出包含双引号字符,则“.import”命令将无法在制表符模式下正确读取输出。要根据 RFC 4180 引用 TSV,以便可以使用“.import”在选项卡模式下输入它,请首先输入“.mode csv”,然后在运行查询之前输入“.separator”“”。


0
投票

这是一个快速而肮脏的 shell 脚本,用于将每个表导出到 table.csv,最后导出 dbfile.sql 整个模式

dbname=$1;tables=$(sqlite3 $dbname  ".tables");for table in $tables ; do echo $table ; sqlite3 -header -csv -separator "\t" $dbname  "select * from $table;">$table.csv;done;sqlite3 $dbname '.schema' > $dbname-schema.sql

复制上述文件中的代码,例如 sqlite2csv.sh 然后运行

sh sqlite2csv.sh dbname.sqlite

您将获得所有表格 csv 和架构文件。 尝试一下,如果有任何问题请给我反馈。

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