MySQL: diesel::Expression trait未为f64类型实现

MySQL: diesel::Expression trait未为f64类型实现

在本文中,我们将介绍在使用diesel时遇到的一个常见错误,即“the trait diesel::Expression is not implemented for f64”。我们将讨论该错误的原因以及如何解决它。

阅读更多:MySQL 教程

什么是DIESEL?

DIESEL是Rust中最常用的ORM之一,它旨在简化与数据库的交互。它建立在Rust类型系统之上,使您可以使用类型安全功能来编写SQL查询。但是,有时在使用DIESEL时,您可能会遇到错误,例如“the trait diesel::Expression is not implemented for f64”。

错误原因

这个错误通常是因为您的Rust code中的字段类型与数据库模式中定义的类型不匹配。例如,假设您有一个包含具有类型f64的某个字段的表。但是,当您使用DIESEL生成的查询时,该标识符的类型为diesel::expression::bound::Bound<f64, Reversed<Nullable<>>>。该错误是由此生成的,因为Bound类型没有实现diesel::Expression trait。

以下是导致此错误的更详细的示例:

extern crate diesel;

table! {
    users (id) {
        id -> Integer,
        name -> Text,
        age -> Float,
    }
}

#[derive(Queryable)]
struct User {
    id: i32,
    name: String,
    age: f64,
}

fn main() {
    use self::users::dsl::*;

    let connection = establish_connection();

    let age_to_find = 30.5f64;

    let query = users.filter(age.gt(age_to_find));
    let results = query.load::<User>(&connection);
    for user in results {
        println!("{:?}", user);
    }
}

在这个例子中,当我们运行Rust应用程序时,我们得到了一个错误消息,指出“the trait diesel::Expression is not implemented for f64”。

解决方法

为了解决该错误,我们可以使用diesel提供的sql_type宏手动指定类型,如下所示:

table! {
    users (id) {
        id -> Integer,
        name -> Text,
        age -> Float,
    }
}

#[derive(Queryable)]
struct User {
    id: i32,
    name: String,
    age: f64,
}

#[derive(Insertable)]
#[table_name = "users"]
pub struct NewUser {
    pub name: String,
    #[column_type = "Float"]
    pub age: f64,
}

fn main() {
    use self::users::dsl::*;

    let connection = establish_connection();

    let age_to_find = 30.5f64;

    let query = users.filter(age.gt(age_to_find));
    let results = query.load::<User>(&connection);
    for user in results {
        println!("{:?}", user);
    }
}

在这个解决方法中,我们手动为age字段指定了类型Float,以便使其与表上的类型匹配。当我们运行Rust应用程序时,我们得到了正确的输出,其中包含匹配我们查询参数的用户数据。

总结

“diesel::Expression”未为”f64″实现是在使用DIESEL时可能遇到的常见错误之一。该错误通常是由于Rust code中的字段类型与数据库模式中定义的类型不匹配而导致的。为了解决该错误,我们可以手动指定类型,以便与表上的定义匹配。希望这篇文章对您有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程