我有一个sqlite3数据库.一列有TEXT类型,并包含我想保存为文件的blob.这些是gzip压缩文件.
该命令的输出sqlite3 db.sqlite3 ".dump" 是:
INSERT INTO "data" VALUES(1,'objects','object0.gz',X'1F8B080000000000000 [.. a few thousands of hexadecimal characters ..] F3F5EF')
如何使用命令行将sqlite文件中的二进制数据提取到文件中?
CL.*_*CL. 60
sqlite3不能直接输出二进制数据,所以你必须将数据转换为hexdump,用于cut从blob文字中提取十六进制数字,并使用xxd(vim包的一部分)将hexdump转换回二进制:
sqlite3 my.db "SELECT quote(MyBlob) FROM MyTable WHERE id = 1;" \
| cut -d\' -f2 \
| xxd -r -p \
> object0.gz
Run Code Online (Sandbox Code Playgroud)
使用SQLite 3.8.6或更高版本,命令行shell包含fileio扩展,它实现了以下writefile功能:
sqlite3 my.db "SELECT writefile('object0.gz', MyBlob) FROM MyTable WHERE id = 1"
Run Code Online (Sandbox Code Playgroud)
Gil*_*pie 14
writefile如果使用命令行工具,您可以使用sqlite3:
用法示例:
select writefile('blob.bin', blob_column) from table where key='12345';
就我而言,我使用“hex”而不是“quote”从数据库中检索图像,并且不需要在命令管道中“剪切”。例如:
sqlite3 fr.db "select hex(bmp) from reg where id=1" | xxd -r -p > 2.png
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21032 次 |
| 最近记录: |