将SQLite空表导出为带有标题的csv
当我将表从SQLite数据库导出到带有标题的csv文件时,为空的表将返回一个空的csv文件。将SQLite空表导出为带有标题的csv,sqlite,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, Co
我想获得一个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]:头*csv
==>tblA.csv tblB.csv tblA.csv tblB.csv一个选项是利用pragma
获取列名,然后只附加行的内容:
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
$cat tblA.csv
身份证,Col01
$cat tblB.csv
身份证,Col01
1,AAA
2,BBB
您还可以使用从pragma_table_info('table_name')中选择group_concat(name,,')
直接获取逗号分隔的名称。@Shawn Nice,这样更干净。更新的答案。谢谢你的回答。我没有任何布拉格表格信息。我的sqlite版本是3.8.8。你认为这可能是原因吗?@Gilles嗯,奇怪。我最初的回答使用了pragma table_info
语句,而不是上述评论者推荐的pragma table_info
表格。如果你想试试的话,我已经把我的答案回滚到原来的版本了。是的,现在它工作得很好。这两种解决方案可能都有用。谢谢
$ cat tblA.csv
ID,Col01
$ cat tblB.csv
ID,Col01
1,AAA
2,BBB