5

问题是当我输入这样的代码时。

let data = sqlx::query("SELECT id, name FROM test")
        .fetch_all(&pool)
        .await;

我得到一个no method named `fetch_all` found for struct `sqlx_core::query::Query<'_, _>` in the current scope错误。以下官方入门自述文件。这也适用于该query_as方法。我怀疑由于某种原因编译器没有“看到”sqlx::Query特征方法,但我不知道如何将它们纳入范围。

虽然当我使用宏时sqlx::query!.fetch_all确实存在。

此外,rust-analyzerLSP 告诉我data变量的类型是 存在一个不便std::result::Result<[type error], [type error]>,这消除了使用自动完成和类型检查的任何可能性,除了运行(众所周知的慢)锈编译器。

PS 我使用 PostgreSQL 作为数据库解决方案,如果有帮助的话。

PSS env 变量 DATABASE_URL 在编译时设置并且是正确的,因此宏会执行所有编译时验证工作。

4

1 回答 1

1

稍微浏览一下 docs.rs,我发现该类型sqlx::Query甚至没有除fetch. 至于sqlx::query_as,我正在寻找的特征被称为PgQueryAs,它实际上包含fetch_all, fetch_optional,fetch_one等。添加use sqlx::postgress::PgQueryAs为我解决了这个问题。

尽管如此,我仍然不知道评估宏以在我的 IDE 中获得体面类型的解决方案。

于 2020-07-25T08:18:17.070 回答