您的位置:首页 > 数据库

SQLite实用武器库(2)利用import命令导入导出数据到CSV文件

2017-05-19 18:30 836 查看

(1)什么是csv文件?

CSV,即Comma-Separated Values,意思是逗号分隔值,或字符分隔值。.csv文件是一种将表数据借助字符分隔的方式存储成文本的文件格式。譬如,可以在excel中另存为csv文件。我们先来试一个,创建一个excel文件,内容如下:

ABC
0name0des0
1name1des1
2name2des2
另存,选择格式为csv,会弹窗要求输入分隔符,输入“|”,得到文本文件,用文本浏览器查看内容如下:

0|name0|des0

1|name1|des1

2|name2|des2

(2)如何将SQLite数据库表导出到csv文件?

先用show命令看一下当前SQLite用户shell中的设置,其中包含分隔符:

sqlite> .show
echo: off
eqp: off
explain: off
headers: off
mode: list
nullvalue: ""
output: stdout
colseparator: "|"
rowseparator: "\n"
stats: off
width:


看到分隔符为“|”。可以使用separator命令来指定分隔符:

sqlite> .separator ,
sqlite> .separator |
sqlite>


导出到csv的原理很简单,将SQLite输出重定向到.csv文件,然后执行select。同样,使用ouput命令,无需手动创建输出的文件,直接输入文件名作为output命令参数即可:

sqlite> select * from test_table;
0|name0|des0
1|name1|des1
2|name2|des2
sqlite>
sqlite> .output test_csv.csv
sqlite> select * from test_table;
sqlite> .output stdout


好,查看test_csv.csv文件内容:

0|name0|des0

1|name1|des1

2|name2|des2

因为这种方式其实只是重定向了输出,执行的是SQL,所以可以满足各种数据组合、筛选等需求。

(3)如何将csv文件导入到SQLite数据库?

使用import命令(.import [file]):

sqlite> delete from test_table;
sqlite>
sqlite> select * from test_table;
sqlite>
sqlite> .import test_csv.csv test_table
sqlite>
sqlite> select * from test_table;
0|name0|des0
1|name1|des1
2|name2|des2
sqlite>


如果数据库中没有这个表,import命令会直接创建表吗?yes。

sqlite> .import test_csv.csv test_table2
sqlite>
sqlite> select * from test_table2;
1|name1|des1
2|name2|des2
sqlite>
sqlite> .schema test_table2
CREATE TABLE test_table2(
"0" TEXT,
"name0" TEXT,
"des0" TEXT
);


看到使用import将csv文件导入到一个不存在的表时,会自动创建这个表,但是会把第一行解析成表信息,并且每个字段都会定义成TEXT。

另外,注意,csv文件的字段分隔符需要与SQLite用户shell中的设置一致。将test_csv.csv文件分隔符改一下测试一下:

0,name0,des0

1,name1,des1

2,name2,des2

sqlite> delete from test_table;
sqlite>
sqlite> select * from test_table;
sqlite>
sqlite> .import test_csv.csv test_table
test_csv.csv:1: expected 3 columns but found 1 - filling the rest with NULL
test_csv.csv:1: INSERT failed: datatype mismatch
test_csv.csv:2: expected 3 columns but found 1 - filling the rest with NULL
test_csv.csv:2: INSERT failed: datatype mismatch
test_csv.csv:3: expected 3 columns but found 1 - filling the rest with NULL
test_csv.csv:3: INSERT failed: datatype mismatch
sqlite>
sqlite> select * from test_table;
sqlite>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: