当我从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
答案 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