通过命令行导入csv的sqlite错误

问题描述:

$ sqlite3 test.sql 
SQLite version 3.6.12 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> create table test (id integer, author_id integer, title varchar(128), name text); 
sqlite> .separator ";" 
sqlite> .import sqlite.csv test 
sqlite.csv line 3: expected 4 columns of data but found 1 
sqlite> .separator ';' 
sqlite> .import sqlite.csv test 
sqlite.csv line 3: expected 4 columns of data but found 1 
sqlite> 

我想导入csv表;作为sqlite的分隔符,但它无法找到4列。我通过选中'将字段名称放在第一行'从sql导出到csv。我能在这里错过什么吗?通过命令行导入csv的sqlite错误

前5行CSV

id;"author_id";"title";"poem"  
1;"92";"A Letter From Italy";"Salve magna parens frugum Saturnia tellus  
Magna virm! tibi res antiqu laudis et artis  
Aggredior sanctos ausus recludere fontes.  
Virg. Geor. 2. 
+2

您能不能告诉我们的前5行CSV文件的? – MatBailie 2012-01-16 10:33:42

+0

@Dems刚刚发布了csv文件的前5行 – merrill 2012-01-17 01:14:06

您不能导入带有主键的表中,您必须先导入到临时表中。

见这个问题的答案SO question

也许有你的字符串中的一个换行符是没有被正确逃脱?所以它认为第二行在“tellus”之后结束,然后试图解析从第三行开始的文本,并且没有找到分号分隔符。你可以发布一个在textpad中打开时看起来像CSV的屏幕截图吗?

+0

它看起来完全像我张贴:) – merrill 2012-01-20 06:24:05

+0

恰恰是我的观点。在您发布的样本中,第二行停在单词“tellus”,第三行以“Magna”开头。这个错误意味着它能够解析前2条线(它发现3“;”和因此4列)并且正在打破第三条。这意味着“tellus”和“Magna”之间的换行符不仅仅是在stackoverflow.com上进行格式化,它是您的文本文件中的换行符。您需要删除换行符或将其转义。让我知道你是否需要帮助做这些事情。 – 2012-01-21 00:51:49

由于您的分隔符只是单个字符,因此请尝试使用不带分号的分隔符命令。所以:

sqlite> .separator ; 
sqlite> .import sqlite.csv test 
+0

我得到了同样的结果 – merrill 2012-01-20 07:20:13