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

如何通过Rust SQLx获取SQLite引擎自省信息?解决查询报错

解决SQLx查询SQLite自省信息时的rowid错误

错误原因

pragma_module_list()是SQLite的虚拟系统表,其结构中并不包含rowid字段,直接在SELECT语句中引用该字段会触发数据库层面的错误,并非SQLx的限制。

解决方案

方法1:用窗口函数生成替代ID

如果需要一个自增的唯一标识,可以使用SQLite的ROW_NUMBER()窗口函数生成替代rowid的id字段:

let recs = sqlx::query!(
    r#"
        SELECT ROW_NUMBER() OVER (ORDER BY name) AS id, name
        FROM pragma_module_list()
        ORDER BY id
    "#
);

方法2:直接查询虚拟表的原生字段

如果不需要额外的id字段,直接查询pragma_module_list()提供的原生字段即可:

let recs = sqlx::query!(
    r#"
        SELECT name, filename, origin
        FROM pragma_module_list()
        ORDER BY name
    "#
);

方法3:SQLite _rowid_关键字说明(仅部分虚拟表支持)

部分SQLite虚拟表支持通过_rowid_引用内部行标识,但pragma_module_list()并不支持此方式,仅作为补充说明。若后续使用其他支持的虚拟表,可尝试:

// 仅适用于支持_rowid_的虚拟表,pragma_module_list()不适用
let recs = sqlx::query!(
    r#"
        SELECT _rowid_ AS id, name
        FROM some_supported_virtual_table
        ORDER BY id
    "#
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:07:05