无法使用柴油箱从 mysql 数据库加载结果

Posted

技术标签:

【中文标题】无法使用柴油箱从 mysql 数据库加载结果【英文标题】:Can't load result from mysql database using diesel crate 【发布时间】:2019-11-22 12:17:17 【问题描述】:

使用柴油箱加载返回错误以与 mysql 数据库交互:

the trait bound `chart_models::Chart: diesel::Queryable<(diesel::sql_types::Integer, diesel::sql_types::Integer, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Integer, diesel::sql_types::Nullable<diesel::sql_types::Text>, diesel::sql_types::Text), _>` is not satisfied

the trait `diesel::Queryable<(diesel::sql_types::Integer, diesel::sql_types::Integer, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Integer, diesel::sql_types::Nullable<diesel::sql_types::Text>, diesel::sql_types::Text), _>` is not implemented for `chart_models::Chart`

note: required because of the requirements on the impl of `diesel::query_dsl::LoadQuery<_, chart_models::Chart>` for `diesel::query_builder::SelectStatement<schema::chart::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::operators::Eq<schema::chart::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>`rustc(E0277)
chart_models.rs(33, 14): the trait `diesel::Queryable<(diesel::sql_types::Integer, diesel::sql_types::Integer, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Numeric, diesel::sql_types::Integer, diesel::sql_types::Nullable<diesel::sql_types::Text>, diesel::sql_types::Text), _>` is not implemented for `chart_models::Chart`

表架构:

table! 
    chart (id) 
        id -> Integer,
        types -> Integer,
        prices -> Decimal,
        time -> Nullable<Varchar>,
        date -> Varchar,
    

chart_models.rs 文件:

use diesel;
use diesel::prelude::*;
use diesel::mysql::MysqlConnection;

use schema::chart;
use schema::chart::dsl::chart as all_chart;
use rust_decimal::Decimal;

pub struct Chart 
    pub id: i32,
    pub types: i32,
    pub prices: Decimal,
    pub time: String,
    pub date: String,


impl Chart 
    pub fn show(id: i32, conn: &MysqlConnection) -> Vec<Chart> 
        all_chart
            .find(id)
            .load::<Chart>(conn)
            .expect("Error loading chart infos")
    


有人可以帮忙检测一下问题吗?

【问题讨论】:

【参考方案1】:

看起来您的 Charts 结构需要 Queryable 特征。

您可以像这样使用派生属性添加它:

#[derive(Queryable)]
pub struct Chart 
    pub id: i32,
    pub types: i32,
    pub prices: Decimal,
    pub time: String,
    pub date: String,

错误信息的重要部分是第二行:

the trait `diesel::Queryable<...(details of your struct)...> is not implemented for `chart_models::Chart`

【讨论】:

【参考方案2】:

您需要确保您的结构与架构中的类型兼容:

pub struct Chart 
    pub id: i32,
    pub types: i32,
    pub prices: Decimal,
    pub time: Option<String>, // time must be an Option given it's Nullable in the schema
    pub date: String,

【讨论】:

以上是关于无法使用柴油箱从 mysql 数据库加载结果的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Rust/Actix 应用程序中使用带有柴油的计时功能

MySQL优化

Laravel 无法显示超过 10,000 条的 mysql 记录

MySQL 优化目的

Datastage 作业使用 ODBC Greenplum Wire Protocol 驱动程序使 netezza 无法加载到 greenplum 数据

具有定制包装类型的柴油