根据https://www.sqlite.org/cli.html#csv,
Run Code Online (Sandbox Code Playgroud)sqlite> .mode csv sqlite> .import C:/work/somedata.csv tab1有两种情况需要考虑:(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 文档完全不准确?