Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用Diesel生成和解析原始SQL查询?_Mysql_Rust_Rust Diesel - Fatal编程技术网

Mysql 如何使用Diesel生成和解析原始SQL查询?

Mysql 如何使用Diesel生成和解析原始SQL查询?,mysql,rust,rust-diesel,Mysql,Rust,Rust Diesel,我正在用火箭框架测试锈迹。对于数据库,我使用Diesel与MySQL数据库交互 下面举几个例子,有很多事情发生在幕后。我有一个MySQL数据库,它运行着一个填充的表,我想对这些表进行原始查询 以下代码有效: use diesel::{prelude::*}; mod schema { table! { organization { id -> Nullable<Integer>, name -> T

我正在用火箭框架测试锈迹。对于数据库,我使用Diesel与MySQL数据库交互

下面举几个例子,有很多事情发生在幕后。我有一个MySQL数据库,它运行着一个填充的表,我想对这些表进行原始查询

以下代码有效:

use diesel::{prelude::*};

mod schema {
    table! {
        organization {
            id -> Nullable<Integer>,
            name -> Text,
            country -> Text,
        }
    }
}

use self::schema::organization;
use self::schema::organization::dsl::{organization as all_orgs};

#[table_name="organization"]
#[derive(Serialize, Deserialize, Queryable, Insertable, Debug, Clone)]
pub struct Organization {
    pub id: Option<i32>,
    pub name: String,
    pub country: String
}

impl Organization {
    pub fn all(conn: &MysqlConnection) -> Vec<Organization> {
        all_orgs.order(organization).load::<Organization>(conn).unwrap()
    }
}
然而,在进行此更改的
货物运行时
,我面临:

error[E0277]:绑定的特性“&diesel::MysqlConnection:diesel::Connection”不满足
-->src/org.rs:26:19
|
26 |。加载(和连接)。展开()
|                   -^^^^
|                   |
|没有为`&diesel::MysqlConnection`实现特性'diesel::Connection'`
帮助:考虑删除“前导”和“参考”
|
=帮助:找到了以下实现:
=注意:由于对`SqlQuery`的`LoadQuery` impl的要求,因此需要`
错误[E0277]:不满足特性绑定的'Organization:QueryableByName'
-->src/org.rs:26:14
|
26 |。加载(和连接)。展开()
|^^^^未为`组织'实现特性'QueryableByName'`
|
=注意:由于对`SqlQuery`的`LoadQuery` impl的要求,因此需要`

在允许我执行原始SQL查询并从函数中正确解析它的同时,如何满足这些错误,给定输入参数和所需输出?

要解决您的问题,您可以删除
.order(organization)
,以避免执行排序

要明确回答问题,请执行以下操作:错误消息提到两个问题:

error[E0277]:绑定的特性“&diesel::MysqlConnection:diesel::Connection”不满足
-->src/org.rs:26:19
|
26 |。加载(和连接)。展开()
|                   -^^^^
|                   |
|没有为`&diesel::MysqlConnection`实现特性'diesel::Connection'`
帮助:考虑删除“前导”和“参考”
|
=帮助:找到了以下实现:
=注意:由于对`SqlQuery`的`LoadQuery` impl的要求,因此需要`
这个问题很容易解决:按照编译器的建议去做,删除对
.load(&conn)
调用的前导
&
引用

error[E0277]:不满足特性绑定'Organization:QueryableByName'
-->src/org.rs:26:14
|
26 |。加载(和连接)。展开()
|^^^^未为`组织'实现特性'QueryableByName'`
|
=注意:由于对`SqlQuery`的`LoadQuery` impl的要求,因此需要`
这一条指出了一个实际问题,即在您的
组织中不允许加载结果。Diesel需要被告知如何从查询响应中构造组织结构。柴油机为此提供了两个特点:

  • 用于根据类型安全查询的结果构造结构(=使用diesel提供的dsl生成的查询,以便在编译时对其进行检查)`
  • 从非类型安全查询的结果构造结构(因此基本上是通过
    diesel::sql\u query执行的查询)
正如错误消息所提到的,您的结构没有实现
QueryableByName
,这是在该结构中加载
diesel::sql\u query
的结果所必需的。你需要实现这个特性。最简单的选择是使用Diesel提供的
派生

您的代码的固定版本如下所示:

使用diesel::{prelude::*,sql\u query};
模式模式{
桌子{
组织机构{
id->可为空,
名称->文本,
国家->文本,
}
}
}
使用self::schema::organization;
#[表_name=“组织”]
#[派生(序列化、反序列化、可查询、可查询ByName、可插入、调试、克隆)]
发布结构组织{
pub id:Option,
酒吧名称:String,
酒吧国家:字符串
}
impl组织{
pub fn all(连接:&MysqlConnection)->Vec{
sql_查询(“从组织中选择id、名称、国家”)
.load(&conn).展开()
}
}

我不需要按任何方式订购-为什么不删除
.order(organization)
行呢?哇,就是这么简单。。我想得太多了。谢谢你的帮助,请回答问题,我会接受!但这并不能回答你的问题。它只会解决你的问题。
use diesel::{prelude::*, sql_query};

mod schema {
    table! {
        organization {
            id -> Nullable<Integer>,
            name -> Text,
            country -> Text,
        }
    }
}

use self::schema::organization;

#[table_name="organization"]
#[derive(Serialize, Deserialize, Queryable, Insertable, Debug, Clone)]
pub struct Organization {
    pub id: Option<i32>,
    pub name: String,
    pub country: String
}

impl Organization {
    pub fn all(conn: &MysqlConnection) -> Vec<Organization> {
         sql_query("SELECT id, name, country FROM organization")
            .load(&conn).unwrap()
    }
}