用 sqlx::postgres 和 i64 生锈

Rust with sqlx::postgres and i64

我是 Rust 新手,正在尝试使用 sqlx 和 PostgresQL 实现 API。 在阅读 PostgresQL 时,它似乎不支持 u64,而 MySQL 支持。所以我将我的代码更改为 i64,如 documented here.

但是我的一些代码似乎仍然需要一个 u64 值:

代码示例:

pub async fn drop_table(&self) -> Result<i64, sqlx::Error> {
    sqlx::query("DROP TABLE IF EXISTS users;")
        .execute(&*self.pool)
        .await
}

及其产生的错误:

error[E0308]: mismatched types
 --> src\dao\user_dao.rs:7:9
  |
7 | /         sqlx::query("DROP TABLE IF EXISTS users;")
8 | |             .execute(&*self.pool)
9 | |             .await
  | |__________________^ expected `i64`, found `u64`
  |
  = note: expected enum `std::result::Result<i64, _>`
             found enum `std::result::Result<u64, _>`

我可能可以强制转换变量,但这可能会在运行时导致恐慌,那么处理它的正确方法是什么?

我已经使用 this 作为参考应用程序。

无论您是在 PostgresQL 连接还是 MySQL 连接上执行查询,reference application is using sqlx v0.3.5 and in that version of sqlx the execute 方法总是 returns 一个 Result<u64, sqlx::Error>u64 表示受执行查询影响的行数,并且始终是无符号的。您应该更新 drop_table 的签名以反映:

pub async fn drop_table(&self) -> Result<u64, sqlx::Error> {
    sqlx::query("DROP TABLE IF EXISTS users;")
        .execute(&*self.pool)
        .await
}