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

已开启offline特性时cargo sqlx prepare仍生成存根文件问题咨询

问题原因及解决方法

多target报错原因

你的Rust包同时包含多个编译目标(比如同时存在lib库、bin二进制、测试用例等多个编译目标),cargo sqlx prepare底层会调用cargo check传递额外编译参数,Rust不允许同时给多个目标传递自定义rustc参数,所以必须指定单一目标。你添加-- --lib/-- --bin 二进制名称的操作已经解决了这个报错。

无查询结果警告的常见原因及修复

  • 未开启sqlx的offline特性
    sqlx离线查询缓存功能默认关闭,需要在Cargo.toml的sqlx依赖中显式开启offline特性:
# 示例中用的是Postgres数据库,可根据实际情况替换为mysql/sqlite等对应特性
sqlx = { version = "你的项目sqlx版本号", features = ["postgres", "runtime-tokio-native-tls", "offline"] }
  • 查询代码被条件编译屏蔽
    如果sqlx相关代码被放在#[cfg(xxx)]条件编译块下,cargo sqlx prepare默认编译配置没有开启对应特性就会扫描不到查询,需要给命令追加对应特性参数:
cargo sqlx prepare --features "你的sqlx相关特性名" -- --lib
  • sqlx-cli版本和项目依赖版本不匹配
    本地安装的cargo-sqlx二进制版本如果和项目Cargo.toml里声明的sqlx版本不一致,也会出现扫描不到查询的问题,确认版本后重新安装对应版本的sqlx-cli即可:
# 版本号、数据库特性根据实际情况调整
cargo install sqlx-cli --version 匹配你项目的sqlx版本号 --no-default-features --features postgres,rustls
  • 查询宏不在指定的编译目标中
    如果你指定了--lib参数,但所有查询宏都写在二进制目标代码中(src/main.rs、src/bin/xxx.rs),lib目标里没有用到相关宏就会扫描不到,换成指定对应二进制目标即可:
cargo sqlx prepare -- --bin 你的二进制包名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:54:02