gpt4 book ai didi

sql - Rust Diesel原始SQL给出错误 “type annotations needed for ` std::result::Result ,柴油::result::Error >`”

转载 作者:行者123 更新时间:2023-12-03 11:38:11 28 4
gpt4 key购买 nike

我正在尝试使用Diesel将简单的原始SQL转换为MySQL,如本示例所示:
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。

最佳答案

据我所能确定的,Diesel没有任何能力执行在编译时不知道返回行的“形状”的查询。这是它的强项之一(至少对于某些用例而言),因为使用得当,它将在编译时验证与数据库的交互。
但是,这使得很难将其用于动态生成的SQL。
如果您的查询始终生成相同数量和类型的列,那么您可以编写如下内容:

// Define a type to represent the rows returned by your query

#[derive(QueryableByName)]
struct StringColumn {
#[sql_type = "Text"]
username: String
}

// Then you can execute your query, telling Rust that you expect
// to get the rows back as the above type
let users:Vec<StringColumn> = diesel::sql_query("SELECT username FROM users").load(&conn)?;
如果您仅使用动态生成的SQL,则最好直接使用 mysql条板箱。

关于sql - Rust Diesel原始SQL给出错误 “type annotations needed for ` std::result::Result <Vec <T>,柴油::result::Error >`”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65870030/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com