20

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」があると、同じエラーが発生します。各行の最初のカンマの前に乱数を追加しても、エラーは発生しません。ただし、使用する必要がある実際のデータセットははるかに大きい可能性があるため、各エントリに一意の主キーを手動で単純に追加することはできません。私は本当にこれでいくつかの助けをいただければ幸いです

4

2 に答える 2

31

CSV ファイルの空のフィールドは単なる空の文字列であり、列には無効ですINTEGER PRIMARY KEY

その列のない一時テーブルにインポートしてから、次のようにデータをコピーします。

INSERT INTO Allegiance(CharacterID, Title) SELECT * FROM TempTable;
于 2013-04-14T10:50:01.147 に答える