2012-05-26 52 views
1

有人请帮助我,因为我的头会爆炸。将数据导入sqlite

我想在sqlite3中导入数据。我有promos.sqlpromos.csv文件。我试图在sqlite的shell中运行此:

.read promos.sql 

还是这样做在UNIX提示:

sqlite3 development.sqlite3<promos.sqlite3 

,每次我得到错误

 
Error: near line 1: near ",": syntax error 
Error: near line 18: near ",": syntax error e.t.c. 

在文件是时间以下行:

INSERT INTO promos (name, promo_type, category, phone, email, message, created_at) VALUES 
('John', 1, 3, '+111 11 111 111 11', '[email protected]', 'Some message', '2009-09-24 12:17:17'),etc 

so,it co在每行列列举错误的地方。

如果我尝试

.import promos.csv promos 

它说:

Error: promos.csv line 1: expected 9 columns of data but found 1

,但文件是9列如预期:

"13","John","1","3","+111 11 111 111 11","[email protected]","Some message","2009-09-24 15:17:17", "2009-09-24 15:17:17"

为什么不工作?

回答

5

对于sql问题:在INSERT语句结尾处有逗号而不是像你应该有的分号吗?请发布您尝试运行的几行sql文件,并发布promos的CREATE TABLE语句。

对于csv问题:sqlite使用|作为默认分隔符,因此您必须将其设置为使用逗号。此外,sqlite导入不会识别带引号的列,因此如果您的数据中包含逗号,最好使用其他方法导入数据。有关详细信息,请参见this article

+1

非常感谢。你给了我一个正确的主意。最初我用sentece,比如'INSERT INTO tbl_name(col_A,col_B)VALUES(1,2,3),(4,5,6),(7,8,9);'但似乎sqlite不支持这个格式。所以我已经为每个记录创建了带有单独查询的新SQL文件,并且它可以工作。 – RaskolnikOFF

+0

是的,SQL通常不支持该语法。你可能需要单独的INSERT语句,或者你可以像INSERT INTO mytable SELECT'aValue','another value'UNION SELECT'2nd row','some value'UNION SELECT'这是第三行','xxx'' ... – Rory