You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过子查询使用SQLite zipfile扩展读取数据库中的Zip Blob?

SQLite中如何将Blob列传入zipfile函数获取压缩包内文件名

问题场景

已将Zip文件以Blob形式存储在SQLite数据库,表结构与插入语句如下:

CREATE TABLE zip_blob( name TEXT, contents BLOB );
INSERT INTO zip_blob( name, contents ) VALUES( 'data.zip', readfile('path/to/data.zip') );

尝试用zipfile()函数列出Blob中压缩包的文件名时,执行以下语句报错:

SELECT name FROM zipfile(SELECT contents FROM zip_blob WHERE name is 'data.zip');

报错信息:

Parse error: near "SELECT": syntax error
  SELECT name FROM zipfile(SELECT contents FROM zip_blob WHERE name is 'data.zip
             error here ---

注意:原Zip文件已不存在,无法使用zipfile(readfile(...))的方式。

解决方案

SQLite的zipfile()函数需要接收单个Blob值作为参数,不能直接嵌套未包裹的SELECT子查询,需将内部查询转为标量子查询(确保返回单行单列的Blob数据),有两种可行写法:

写法1:给内部SELECT添加外层括号

SELECT name FROM zipfile( (SELECT contents FROM zip_blob WHERE name = 'data.zip') );

括号明确告知SQLite这是一个返回单个值的子查询表达式,避免语法解析错误。

写法2:使用JOIN关联表与zipfile结果

SELECT z.name
FROM zip_blob b, zipfile(b.contents) z
WHERE b.name = 'data.zip';

这种方式通过表别名直接引用Blob列,更直观,同时确保只处理目标行的Blob数据。

内容的提问来源于stack exchange,提问作者sakra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:54:49