2013-03-10 75 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

相关问题