如何将存储在sqlite数据库中的文件转储为blob?

ale*_*ail 32 sqlite blob

我有一个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';


鄭大大*_*鄭大大 5

就我而言,我使用“hex”而不是“quote”从数据库中检索图像,并且不需要在命令管道中“剪切”。例如:

sqlite3 fr.db "select hex(bmp) from reg where id=1" | xxd -r -p > 2.png
Run Code Online (Sandbox Code Playgroud)