【发布时间】:2021-04-28 09:19:21
【问题描述】:
我正在尝试使用 Diesel 对 MySQL 进行简单的原始 SQL,如下例所示:
https://docs.diesel.rs/diesel/fn.sql_query.html
let users = sql_query("SELECT username FROM users").load(&connection);
但是这给了我一个错误信息:
error[E0282]: type annotations needed for `std::result::Result<Vec<T>, diesel::result::Error>`
--> src/main.rs:53:57
|
53 | let users = sql_query("SELECT username FROM users").load(&connection);
| ----- ^^^^ cannot infer type for type parameter `U` declared on the associated function `load`
| |
| consider giving `users` the explicit type `std::result::Result<Vec<T>, diesel::result::Error>`, where the type parameter `U` is specified
附言。我需要使用原始 sql,因为我需要运行动态 sql。
【问题讨论】:
-
你有一个名为
User的结构吗?如果是,您是否为该结构派生了#[derive(QueryableByName)]?如果是,您是否尝试通过添加属性#[table_name = "users"]来指定与此结构相关的表?如果仍然是,您是否知道load(&connection)返回需要解包的Result<Vec<T>, Err>?如果仍然是,那么您是否尝试在局部变量上添加类型声明,如let users: Vec<User> = .... -
这能回答你的问题吗? Cannot infer type for `U`
-
@TheCoolDrop 我没有 User 结构,因为我认为原始 sql 会让我在事先不知道结果的情况下运行动态 sql。那可能吗?如果事先不知道结果类型,我将运行的 sql 将更加复杂和动态。我该怎么做?
-
你怎么会不知道结果的类型呢?是不是你正在执行一个你事先不知道其结构的选择(或任何其他查询)?您将了解哪些有关表格的信息,哪些信息会丢失?你至少知道列数吗?
-
@TheCoolDrop 我将有很多自定义函数,并且这些函数会传递各种属性。根据属性,函数将返回带有变量列的变量 json。 rust 有没有办法在不知道里面有什么的情况下接收自定义动态 json?类似于 Swift 的 Any 和 AnyObject 类型?
标签: sql rust rust-diesel