【问题标题】:Import csv into sqlite with autoincrementing primary key使用自动递增主键将 csv 导入 sqlite
【发布时间】:2013-04-06 07:56:26
【问题描述】:

我正在尝试在 sqlite 中创建一个表,该表从 csv 文件中获取数据并将自动递增的主键添加到第一列。 这是我要向其中插入数据的表:

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”,我会收到相同的错误。 当我在每行的第一个逗号之前添加随机数时,我没有收到任何错误。但是,我需要使用的实际数据集可能要大得多,因此,我不能简单地为每个条目手动添加唯一的主键。我真的很感谢一些帮助

【问题讨论】:

  • 如果您使用第三方程序,您可以选择在 csv 文件中设置代表 NULL 值的文本。 SQLiteStudio 就是其中之一。
  • @VassilisGr 代表 NULL 值的文本是什么意思?
  • @pouya,如果你有一个csv文件,其中一行是pouya, 26, NULL,你可以设置你的csv文件中的NULL值用“NULL”字符串表示。在pouya, 26,, 的情况下,您将设置NULL 为“”(空字符串)。或者pouya, 26, 0 CSV 文件中的NULL 为“0”!
  • @VassilisGr 那么 SQLiteStudio 或任何其他软件如何在 csv 文件中定义 NULL 值?
  • @pouya,是 string to db specificdb specific to string 的问题,其中 string 是空字符串表示形式,它可以是“NULL”,或者我提到的空字符串。它应该是此类应用程序中的用户偏好。就是这样。

标签: database csv sqlite


【解决方案1】:

CSV 文件中的空字段只是一个空字符串,对于 INTEGER PRIMARY KEY 列无效。

导入没有该列的临时表,然后将数据复制过来:

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

【讨论】:

  • 这个解决方案出现错误,我必须在 SELECT 列表中添加一个空字段 INSERT INTO Allegiance(CharacterID, Title) SELECT NULL,Title FROM TempTable;
  • 谢谢,乔治。这适用于不匹配的列大小。我在 temptable 中有 33 列,在所需的表模式中有 34 列,具有唯一的 auto id 列。使用 SELECT NULL,* FROM TempTable 节省了我很多时间,而不必编写 34 列
【解决方案2】:

您可以在文本文件中添加带有主键的列,然后将其导入。 注意:如果您在第一列中收到该错误,请确保您的文件没有 BOM。如果它有 BOM(文件开头的 3 个字节),它将在第一行失败。

1:插入失败:数据类型不匹配

>     drop table words ;
>     CREATE TABLE words (id INTEGER PRIMARY KEY AUTOINCREMENT, name COLLATE NOCASE, rank INT);
>     .import file.txt words

1|a|0
2|b|0
3|c|0
4|d|0
5|e|0
6|f|0
7|g|0

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 2020-08-28
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2017-10-14
    • 2012-01-21
    相关资源
    最近更新 更多