Import
SQLite CSV 導入不會自動創建表
根據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.html
for 3.7.13,但.import
當時幾乎沒有記錄。
我有這個確切的問題。更新到最新版本的 SQLite3 (3.18) 修復了它。