使用标题将SQLite空表导出到csv

时间:2018-12-16 02:23:53

标签: sqlite

当我从SQLite数据库中将表导出到带有标题的csv文件时,为空的表将返回一个空的csv文件。
在这种情况下,我想获取仅包含标题的csv文件。

这里是一个例子。

使用tblA和tblB创建一个数据库,其中表A没有数据。

sqlite3 test.sqlite

CREATE TABLE tblA (
  ID LONG,
  Col01 TEXT
 );

CREATE TABLE tblB (
  ID LONG,
  Col01 TEXT
 );

INSERT INTO tblB (ID, Col01)
VALUES
(1, "AAA"), 
(2, "BBB");

.quit

导出csv中的所有表:

# obtain all data tables from database
tables=`sqlite3 test.sqlite "SELECT tbl_name FROM sqlite_master WHERE type='table' and tbl_name not like 'sqlite_%';"`

for i in $tables ; do 
    sqlite3 -header -csv test.sqlite "select * from $i;" > "$i.csv" ;
done

检查以下csv文件的内容:

[tmp] : head *csv
==> tblA.csv <==

==> tblB.csv <==
ID,Col01
1,AAA
2,BBB

我想代替它:

[tmp] : head *csv
==> tblA.csv <==
ID,Col01

==> tblB.csv <==
ID,Col01
1,AAA
2,BBB

1 个答案:

答案 0 :(得分:1)

一种选择是利用pragma table_info获取列名,然后仅附加行的内容:

for i in $tables ; do
    sqlite3 test.sqlite "pragma table_info($i)" | cut -d '|' -f 2 | paste -s -d, > "$i.csv"
    sqlite3 -csv test.sqlite "select * from $i;" >> "$i.csv"
done

结果:

$ cat tblA.csv
ID,Col01
$ cat tblB.csv
ID,Col01
1,AAA
2,BBB