背景资料
我需要使用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语句创建的。
答案 0 :(得分:1)
只需使用命令行标志:
sqlite3 widget.db -separator ',' '.import /tmp/widgets_2017-03-15-14-36.csv users'
这对我有用。