【问题标题】:Is it possible to import a CSV file to an existing table without the headers being included?是否可以在不包含标题的情况下将 CSV 文件导入现有表?
【发布时间】:2018-04-09 11:03:07
【问题描述】:

我正在尝试将 CSV 文件导入到一个空表,但该表已存在于 SQLite 数据库中。例如:

sqlite> CREATE TABLE data (...);
sqlite> .mode csv
sqlite> .import mydata.csv data

我提前创建了表,因为我想指定主键、数据类型和外键约束。此过程按预期工作,但不幸的是,它在表中包含了 CSV 文件的标题行。

这是我从 SQLite 文档中了解到的关于 CSV 导入的内容:

有两种情况需要考虑:(1) 表“tab1”以前不存在,(2) 表“tab1”已经存在。

在第一种情况下,当表以前不存在时,会自动创建表,并使用输入 CSV 文件的第一行的内容来确定表中所有列的名称。换句话说,如果该表以前不存在,则 CSV 文件的第一行被解释为列名,实际数据从 CSV 文件的第二行开始。

对于第二种情况,当表已经存在时,CSV 文件的每一行,包括第一行,都被假定为实际内容。如果 CSV 文件包含列标签的初始行,则该行将作为数据读取并插入到表中。为避免这种情况,请确保该表以前不存在。

所以基本上,我得到了额外的数据,因为我已经提前创建了表格。是否有改变这种行为的标志?如果不是,最好的解决方法是什么?

【问题讨论】:

    标签: sqlite csv import


    【解决方案1】:

    sqlite3 命令行 shell 没有这样的标志。

    如果你有足够先进的操作系统,你可以使用外部工具来拆分第一行:

    sqlite> .import "|tail -n +2 mydata.csv" data
    

    【讨论】:

    • 这是我在网上看到的最好的答案
    【解决方案2】:

    您还可以将--skip 1 选项与.import 结合使用,如sqlite3 websitethis SO Answer 中所述。因此,您可以使用以下命令

    .import --csv --skip 1 mydata.csv data
    

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 1970-01-01
      • 2015-04-25
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      相关资源
      最近更新 更多