2013-04-13 55 views
12

我正在嘗試在sqlite中創建一個從csv文件獲取數據並向第一列添加自動增量主鍵的表。 這裏是我嘗試將數據插入到表:用自動增量主鍵將csv導入sqlite

DROP TABLE IF EXISTS Allegiance; 
CREATE TABLE Allegiance (
    AllegianceID INTEGER PRIMARY KEY AUTOINCREMENT, 
    CharacterID INTEGER, 
    Title TEXT, 
    FOREIGN KEY (CharacterID) REFERENCES Characters(CharacterID)); 

下面是.csv文件

, 3, King of the North 
, 14, King of the Andals and the First Men 
, 15, Lord of Dragonstone 
, 26, Khaleesi 
, 35, Lord Reaper of Pyke 

這個數據我收到的錯誤:

sqlite> .mode csv 
sqlite> import allegiances.csv Allegiance; 
Error: datatype mismatch 

如果我在每行的第一個逗號之前有「null」,我會收到同樣的錯誤。 當我在每行的第一個逗號前添加隨機數字時,我沒有收到任何錯誤。但是,我需要使用的實際數據集可能會更大,因此,我不能簡單地爲每個條目手動添加唯一的主鍵。我真的很感謝這個幫助

+1

如果使用第三方程序,你可能需要設置代表的NULL值的文本選項您csv文件。 SQLiteStudio是這些程序之一。 – Vassilis

+0

@VassilisGr表示NULL值的文本是什麼意思? – pouya

+0

@pouya,如果你有一個csv文件,一行就像'pouya,26,NULL',你可以設置你的csv文件中的NULL值由「NULL」字符串表示。如果是'pouya,26,',你可以設置NULL是「」(空字符串)。或者'pouya,26,0'在csv文件中NULL是「0」! – Vassilis

回答

16

CSV文件中的空字段只是一個空字符串,對於INTEGER PRIMARY KEY列無效。

導入到一個臨時表,而該列,然後在與數據複製:

INSERT INTO Allegiance(CharacterID, Title) SELECT * FROM TempTable; 
+0

我得到了這個解決方案的錯誤,我不得不在SELECT列表中添加一個空字段INSERT INTO Allegiance(CharacterID,Title)SELECT NULL,Title FROM TempTable; –