SQLite CSV 导入不会自动创建表

200*_*ess 6 sqlite import csv

根据https://www.sqlite.org/cli.html#csv

sqlite> .mode csv
sqlite> .import C:/work/somedata.csv tab1
Run Code Online (Sandbox Code Playgroud)

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

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

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

我试过这个并得到一个错误:

sqlite> .mode csv
sqlite> .import C:/work/somedata.csv tab1
Run Code Online (Sandbox Code Playgroud)

但是,如果我先创建表,那么它“有效”,但我最终会得到一个不需要的标题行,因为它是情况 (2):

$ cd /tmp
$ rm -f database.sqlite3
$ ( echo 'a,b,c' ; echo '1,2,3' ) > somedata.csv
$ sqlite3 database.sqlite3
SQLite version 3.7.13 2012-07-17 17:46:21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .version
SQLite 3.7.13 2012-07-17 17:46:21 65035912264e3acbced5a3e16793327f0a2f17bb
sqlite> .mode csv
sqlite> .import somedata.csv sometable
Error: no such table: sometable
Run Code Online (Sandbox Code Playgroud)

我已经使用/usr/bin/sqlite3OS X 10.9.5 中的 3.7.13(如上所示)和 Debian 6 中的 3.7.3 版重现了这个问题。

我是否在查看我的 SQLite 版本的错误文档?有没有我忽略设置的模式?还是 SQLite 文档完全不准确?

CL.*_*CL. 4

您链接到的文档页面适用于 SQLite 的当前版本 (3.8.9)。

您可以找到3.7.13的旧版本cli.html,但当时.import几乎没有文档记录。