如何使用文件内容更新sqlite3中的单个字段?

时间:2014-05-10 00:23:27

标签: sql sqlite

这相当于我的earlier question,但适用于sqlite

和以前一样,我正在尝试使用sqlite3命令行客户端执行以下操作。

UPDATE my_table set my_column=CONTENT_FROM_FILE where id=1;

我在.import上看过the documentation,但这似乎对我要做的事情有点重要。

从文件设置一个字段的值的正确方法是什么?

我寻求的方法不应该对文件内容施加约束。

2 个答案:

答案 0 :(得分:1)

假设文件内容是所有UTF-8文本并且没有任何可能被误解的引用字符,您可以这样做(假设posix shell - 在Windows上尝试cygwin):

$ echo "UPDATE my_table set my_column='" >> temp.sql
$ cat YourContentFile >> temp.sql
$ echo "' where id=1;" >> temp.sql
$ sqlite3
SQLite version 3.7.13 2012-07-17 17:46:21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .read temp.sql

如果内容确实有单引号,请先使用简单的查找和替换来转义它们(无论如何都需要这样做)。

HTH!

答案 1 :(得分:0)

请参阅:http://www.sqlite.org/cli.html#fileio

sqlite> INSERT INTO images(name,type,img)
   ...>   VALUES('icon','jpeg',readfile('icon.jpg'));

在你的情况下:

UPDATE my_table set my_column=readfile('yourfile') where id=1;

如果您没有readfile,则需要先.load该模块。

注意

我发现提供的fileio模块:http://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/fileio.c使用sqlite3_result_blob。当我在带有文本列的项目中使用它时,会导致将中文字符插入到表中,而不是从文件中读取的字节。可以通过将其更改为sqlite3_result_text来解决此问题。有关构建和加载运行时扩展的说明,请参阅http://www.sqlite.org/loadext.html