2013-04-13 22 views
12

Tôi đang cố gắng tạo bảng trong sqlite lấy dữ liệu từ tệp csv và thêm khóa chính tự động tăng lên vào cột đầu tiên. Dưới đây là bảng tôi đang cố gắng để chèn dữ liệu vào:Nhập csv vào sqlite với autoincrementing khóa chính

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

Dưới đây là các dữ liệu trong tập tin .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 

Đây là lỗi tôi nhận được:

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

Tôi nhận được lỗi tương tự nếu tôi có "null" trước dấu phẩy đầu tiên trong mỗi dòng. Khi tôi thêm các số ngẫu nhiên trước dấu phẩy đầu tiên trong mỗi dòng, tôi không nhận được bất kỳ lỗi nào. Tuy nhiên, tập dữ liệu thực tế tôi cần làm việc có thể lớn hơn nhiều và do đó, tôi không thể chỉ cần thêm thủ công khóa chính duy nhất cho mỗi mục nhập. Tôi thực sự đánh giá cao một số trợ giúp với điều này

+1

Nếu bạn đang sử dụng phần mềm của bên thứ ba, bạn có thể có tùy chọn để thiết lập các văn bản đại diện cho giá trị NULL trong của bạn tệp csv. SQLiteStudio là một trong những chương trình đó. – Vassilis

+0

@VassilisGr Bạn ngụ ý gì bởi văn bản đại diện cho giá trị NULL? – pouya

+0

@pouya, nếu bạn có tệp csv có hàng giống như 'pouya, 26, NULL', bạn có thể đặt giá trị NULL trong tệp csv của bạn được biểu thị bằng chuỗi "NULL". Trong trường hợp 'pouya, 26,' bạn sẽ đặt NULL là "" (chuỗi rỗng). Hoặc 'pouya, 26, 0' NULL là" 0 "trong tệp csv! – Vassilis

Trả lời

16

Trường trống trong tệp CSV chỉ là một chuỗi rỗng, không hợp lệ cho cột INTEGER PRIMARY KEY.

nhập vào một bảng tạm thời mà không có cột đó, sau đó sao chép dữ liệu qua với:

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

Tôi nhận được một lỗi với giải pháp này, tôi đã phải thêm một trường null trong danh sách SELECT INSERT INTO Allegiance (CharacterID, Title) SELECT NULL, TỪ TỪ TempTable; –