Import

SQLite CSV 導入不會自動創建表

  • April 17, 2017

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

sqlite> .mode csv
sqlite> .import C:/work/somedata.csv tab1

有兩種情況需要考慮:(1)表“tab1”以前不存在,(2)表“tab1”已經存在。

在第一種情況下,當表以前不存在時,會自動創建表,並使用輸入 CSV 文件的第一行的內容來確定表中所有列的名稱。換句話說,如果該表以前不存在,則 CSV 文件的第一行被解釋為列名,實際數據從 CSV 文件的第二行開始。

對於第二種情況,當表已經存在時,CSV 文件的每一行,包括第一行,都被假定為實際內容。如果 CSV 文件包含列標籤的初始行,則該行將作為數據讀取並插入到表中。為避免這種情況,請確保該表以前不存在。

我試過這個並得到一個錯誤:

$ 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

但是,如果我首先創建表,那麼它“工作”,但我最終得到一個不需要的標題行,因為它是案例 (2):

sqlite> CREATE TABLE sometable (a, b, c);
sqlite> .import somedata.csv sometable
sqlite> SELECT * FROM sometable;
a,b,c
1,2,3

我已經/usr/bin/sqlite3在 OS X 10.9.5 中使用 3.7.13(如上所示)和 Debian 6 中的 3.7.3 版本重現了這個問題。

我是否正在查看我的 SQLite 版本的錯誤文件?有沒有我忽略設置的模式?還是 SQLite 文件完全不准確?

您連結到的文件頁面適用於 SQLite 的目前版本(3.8.9)。

您可以探勘舊版本的cli.htmlfor 3.7.13,但.import當時幾乎沒有記錄。

我有這個確切的問題。更新到最新版本的 SQLite3 (3.18) 修復了它。

引用自:https://dba.stackexchange.com/questions/99183