尝试将csv导入sqlite db失败,错误 - 预期9列但找到1 - 用NULL填充其余列

时间:2017-03-15 14:53:10

标签: bash sqlite csv

背景资料

我需要使用csv文件作为输入,从命令行创建一个sqlite数据库(因为所有这些最终将以bash脚本结束)。

问题

当我尝试运行.import命令时,我收到错误:预期9列但找到1 - 用NULL填充其余部分

**代码/命令**

我正在尝试运行以下命令:

mydevbox:/tmp/# sqlite3 widgets.db ".import /tmp/widgets_2017-03-15-14-36.csv users"
/tmp/widgets_2017-03-15-14-36.csv:1: expected 9 columns but found 1 - filling the rest with NULL
/tmp/widgets_2017-03-15-14-36.csv:2: expected 9 columns but found 1 - filling the rest with NULL
/tmp/widgets_2017-03-15-14-36.csv:3: expected 9 columns but found 1 - filling the rest with NULL
/tmp/widgets_2017-03-15-14-36.csv:4: expected 9 columns but found 1 - filling the rest with NULL
/tmp/widgets_2017-03-15-14-36.csv:5: expected 9 columns but found 1 - filling the rest with NULL
/tmp/widgets_2017-03-15-14-36.csv:6: expected 9 columns but found 1 - filling the rest with NULL

用户表拥有主键。架构如下所示:

mydevbox:/tmp# sqlite3 widgets.db
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE users(fname varchar(100), lname varchar(100), description varchar(100),grp INTEGER, group_name varchar(100), destination_id varchar(100), w_number varchar(10), destination varchar(100), class varchar(10));
sqlite>

我认为可能是因为我没有指定分隔符。所以我尝试了这个:

mydevbox:/tmp# sqlite3 widget.db ".separator ,; .import /tmp/widgets_2017-03-15-14-36.csv users"
Usage: .separator COL ?ROW?

正如您所看到的那样,它失败并且有关分隔符的错误。

以下是csv的前几行:

Jane,Doe,asdf,0,"",1,1234,4444,sip
John,Doe,,0,,2,12752,jdoe@yahoo.com,smtp
John,Doe,,0,,2,12752,jdoe2@yahoo.com,smtp
JJ,Blaird,,0,,4,12477,blaird@gmail.com,smtp

任何建议将不胜感激。 FWIW,这个csv是通过针对postgresql数据库的select语句创建的。

1 个答案:

答案 0 :(得分:1)

只需使用命令行标志:

sqlite3 widget.db -separator ',' '.import /tmp/widgets_2017-03-15-14-36.csv users'

这对我有用。