这相当于我的earlier question,但适用于sqlite
。
和以前一样,我正在尝试使用sqlite3
命令行客户端执行以下操作。
UPDATE my_table set my_column=CONTENT_FROM_FILE where id=1;
我在.import
上看过the documentation,但这似乎对我要做的事情有点重要。
从文件设置一个字段的值的正确方法是什么?
我寻求的方法不应该对文件内容施加约束。
答案 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。