0

我是 Rust 的新手,正在尝试使用 sqlx 和 PostgresQL 实现 API。在阅读有关 PostgresQL 的信息时,它似乎不像u64MySQL 那样支持 . 因此,我已将代码更改为i64,如此处所述

然而,我的一些代码似乎仍然需要一个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, _>`

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

我已将此用作参考应用程序。

4

1 回答 1

0

参考应用程序使用的是 sqlx v0.3.5,并且在该版本sqlx的方法中,无论您是在 PostgresQL 连接还是 MySQL 连接上执行查询,都execute始终返回 a 。表示受执行查询影响的行数,并且始终是无符号的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
}
于 2021-01-30T15:39:33.753 回答