是否可以将CSV文件导入现有表而不包含标题?

时间:2017-10-27 19:04:51

标签: sqlite csv import

我正在尝试将CS​​V文件导入到一个空的但已存在于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文件包含列标签的初始行,则该行将作为数据读取并插入表中。为避免这种情况,请确保该表先前不存在。

基本上,我得到了额外的数据,因为我事先创建了表格。有没有改变这种行为的旗帜?如果没有,最好的解决方法是什么?

2 个答案:

答案 0 :(得分:5)

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

如果您拥有足够高级的操作系统,则可以使用外部工具拆分第一行:

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

答案 1 :(得分:1)

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

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