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

jnc*_*ton 3 csv sqlite import

我正在尝试将CS​​V文件导入到一个空的但已存在于SQLite数据库中的表中.例如:

sqlite> CREATE TABLE data (...);
sqlite> .mode csv
sqlite> .import mydata.csv data
Run Code Online (Sandbox Code Playgroud)

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

以下是我从SQLite文档中了解到的有关CSV导入的内容:

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

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

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

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

Sag*_*gar 6

您还可以使用sqlite3 网站SO Answer上记录的--skip 1选项。因此,您可以使用以下命令.import

.import --csv --skip 1 mydata.csv data
Run Code Online (Sandbox Code Playgroud)


CL.*_*CL. 5

sqlite3命令行壳有没有这样的标志.

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

sqlite> .import "|tail -n +2 mydata.csv" data
Run Code Online (Sandbox Code Playgroud)

  • 对于snide足够高级的评论+1 (2认同)