2012-01-16 38 views
9
$ 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

回答

5

您不能導入帶有主鍵的表中,您必須先導入到臨時表中。

見這個問題的答案SO question

1

也許有你的字符串中的一個換行符是沒有被正確逃脫?所以它認爲第二行在「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

4

由於您的分隔符只是單個字符,因此請嘗試使用不帶分號的分隔符命令。所以:

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

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