2013-03-10 113 views
7

我有簡單的文本文件,只包含普通文本。將文本文件中的內容加載到sqlite表中?

我想知道是否有辦法將文本內容加載到sqlite表中。所以也許我可以創建表myTable(nameOfText TEXT,contents TEXT);

然後將文本的名稱放入第一列並將內容放入第二列。

如果放入文件的名稱很難,將內容加載到一個列表中也是一樣好。

任何建議,將不勝感激。

謝謝!

+0

文本文件有什麼格式? – 2013-03-10 10:30:21

回答

2

termsql是一種工具,可以將文件或程序輸出(stdin)的文本轉換爲sqlite數據庫。

termsql -c nameOfText,contents -i input.txt -o myDB.db 

這將創建一個列nameOfText和內容的表。對於input.txt中的每一行 ,一行將被插入到myDB.db中。

您沒有告訴我們有關分隔符nameOfText和上下文之間的區別。通過 默認termsql假定空格是分隔符。但它應該是 '' 例如, 那麼你會做這樣的事情:

termsql -d ',' -c nameOfText,contents -i input.txt -o myDB.db 

你可以termsql這裏: https://gitorious.org/termsql https://freecode.com/projects/termsql

Termsql具有其他usecases了。您可以在一個命令中對新數據庫執行SQL語句。 以下示例將創建數據庫,並在命令行上爲內容列包含字符串'test'的所有行返回nameOfText列。

termsql -d ',' -c nameOfText,contents -i input.txt -o myDB.db "select nameOfText from tbl where contents like '%test'" 
+0

鏈接被破壞 - 似乎可以從[這裏](https:// github。com/tobimensch/termsql)。雖然我不明白爲什麼這樣做比創建表格更可取。 .import ...'如下所述,然後以腳本'sqlite3 myDB.db「的形式運行」.read to_table.sql「' – JohnSG 2016-04-06 19:41:46

15

假設你有一個CSV格式的文件的text.txt:

name1,content1 
name2,content2 

嘗試下面的命令中的test.txt中的數據導入到表

D:\test>sqlite3 test.db 
SQLite version 3.6.23 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> create table myTable(nameOfText TEXT, contents TEXT); 
sqlite> .separator "," 
sqlite> .import test.txt myTable 
sqlite> select * from myTable; 
name1,content1 
name2,content2 
sqlite> 

變化使用的分隔您的文本文件與.separator命令,然後再導入數據。

+0

'.separator「,'' 沒有工作 – 2017-03-30 12:38:38

2

函數readfile讀取文件的內容並將該內容作爲BLOB返回。使用命令行shell時可以使用此功能。例如:

sqlite> CREATE TABLE files(name TEXT, content TEXT); 
sqlite> INSERT INTO files(name,content) VALUES('a.txt',readfile('a.txt')); 

這個函數的文檔和writefile可在http://www.sqlite.org/cli.html

+0

請注意,readfile(X)和writefile(X,Y)函數是擴展函數,沒有內置到核心SQLite庫中。 – 2017-07-17 19:47:25

相關問題