<Struct> 没有实现特征 `diesel::Insertable<schema::trd::table>`

Posted

技术标签:

【中文标题】<Struct> 没有实现特征 `diesel::Insertable<schema::trd::table>`【英文标题】:The trait `diesel::Insertable<schema::trd::table>` is not implemented for <Struct> 【发布时间】:2021-12-05 01:43:50 【问题描述】:

我正在尝试使用柴油编写一个简单的插入语句,但我遇到了问题:

特性diesel::Insertableschema::tbl::table 没有实现

我的插入看起来像:

pub fn insert_trades(trades : Struct) 

use super::super::schema::tbl::dsl::*;

let conn : &PgConnection = &establish_connection().get().unwrap();

insert_into(tbl).values(&trades).get_result(conn);


我的结构看起来像:

#[derive(Debug, Serialize, Deserialize, Insertable, Queryable)]

#[table_name = "tbl"]

pub struct Struct 

pub trade_id: Option<String>,

pub event_time: Option<i64>,

pub event_type: Option<String>,

pub trade_time: Option<i64>,

pub symbol: Option<String>,

pub buyer_id: Option<i64>,

pub seller_id: Option<i64>,

pub price: Option<String>,

pub quantity: Option<String>


Schema.rs

table! 

tbl (trade_id) 

trade_id -> Varchar,

event_time -> Int8,

event_type -> Varchar,

trade_time -> Int8,

symbol -> Varchar,

buyer_id -> Int8,

seller_id -> Int8,

price -> Varchar,

quantity -> Varchar,




编译器抛出的问题是:

error[E0277]: the trait bound `&my_trader::models::trade::Struct: diesel::Insertable<schema::tbl::table>` is not satisfied
 --> src/service/trade_service.rs:8:40
  |
8 |     insert_into(tbl).values(&trades).get_result(conn);
  |                                        ^^^^^^^ the trait `diesel::Insertable<schema::tbl::table>` is not implemented for `&my_trader::models::trade::Struct`
  |
  = help: the following implementations were found:
            <&'insert my_trader::models::trade::Struct as diesel::Insertable<my_trader::schema::tbl::table>>
            <my_trader::models::trade::Struct as diesel::Insertable<my_trader::schema::tbl::table>>

我不确定我做错了什么。我试图用谷歌搜索,但没有运气,而且对 rust 世界很陌生,所以不知道问题出在哪里。谢谢!

【问题讨论】:

您好,您声明了带有选项且没有引用的结构。这个帖子能帮到你吗? ***.com/questions/55859061/… 请发布完整的错误信息,包括上下文信息和编译器建议。 【参考方案1】:

我发现了问题。基本上我试图导入的Struct 是一个完全不同的包。虽然它指的是正确的文件,但当我像 crate:: 这样更改导入时,它工作得非常好。之前它指的是像 my_trader:: 这样的文件,它是由 IDE 自动完成的。

【讨论】:

以上是关于<Struct> 没有实现特征 `diesel::Insertable<schema::trd::table>`的主要内容,如果未能解决你的问题,请参考以下文章

如何强制类型在编译时实现特征?

`diesel_geography::types::GeogPoint` 没有实现特征 `serde::Deserialize<'_>`

go继承

`chrono::DateTime<chrono::Utc>` 没有实现特征`std::ops::Add<std::time::Duration>`

如何在没有 DI 的类库中使用 ILogger<Class>

[易学易懂系列|rustlang语言|零基础|快速入门|(14)]