小编Luu*_*ter的帖子

在 Diesel 中执行正确的联接

我有一个函数,它接受两个可选的过滤参数,如果提供了这些参数,则过滤表中的数据。为此,我创建了一个盒装查询。我想用这个盒装查询创建一个正确的连接。Diesel 的当前文档没有提到右连接,但它似乎更喜欢这种belonging_to方法。我已将我的代码简化为一个示例:

#[macro_use] extern crate diesel;

use diesel::prelude::*;

table! {
    groups (id) {
        id -> Int4,
        name -> Text,
    }
}

table! {
    user_groups (id) {
        id -> Int4,
        user_id -> Int4,
        group_id -> Int4,
    }
}

allow_tables_to_appear_in_same_query!(groups, user_groups);

#[derive(Debug, Queryable)]
struct Group {
    id: i32,
    name: String,
}

#[derive(Debug, Queryable, Associations)]
#[belongs_to(Group)]
struct UserGroup {
    id: i32,
    user_id: i32,
    group_id: i32,
}

fn filter(
    name: Option<&str>,
    user_id: Option<i32>,
    conn: &diesel::PgConnection,
) -> Result<Vec<(Group, Vec<UserGroup>)>, Box<dyn std::error::Error>> { …
Run Code Online (Sandbox Code Playgroud)

postgresql rust rust-diesel

7
推荐指数
1
解决办法
1253
查看次数

使用柴油的通用功能会导致溢出

我有一个用Rust编写的API,它的目标是在数据库中公开~15个表.我已经编写了几个非常相似的函数来公开每个表,所以我认为我会对多态性进行破解以简化代码.

我已将所有代码缩减为单个文件:

#[macro_use]
extern crate diesel;
extern crate dotenv;
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;

table! {
    table1 (id) {
        id -> Int4,
        value -> Text,
    }
}

table! {
    table2 (id) {
        id -> Int4,
        value -> Text,
    }
}

#[derive(Identifiable, Queryable, Serialize)]
#[table_name = "table1"]
struct Model1 {
    pub id: i32,
    pub value: String,
}

#[derive(Identifiable, Queryable, Serialize)]
#[table_name = "table2"]
struct Model2 {
    pub id: i32,
    pub value: String,
}

use dotenv::dotenv;
use …
Run Code Online (Sandbox Code Playgroud)

generics rust

5
推荐指数
1
解决办法
231
查看次数

在请求保护中访问 Rocket 0.4 数据库连接池

我正在使用 Rocket 创建一个带有身份验证的 web 应用程序。为此,我创建了一个User实现FromRequest. 它采用授权标头,其中包含一个 JSON Web 令牌。我反序列化此令牌以获取有效负载,然后从数据库中查询用户。这意味着FromRequest实现需要一个diesel::PgConnection. 在 Rocket 0.3 中,这意味着调用PgConnection::establish,但在 Rocket 0.4 中,我们可以访问连接池。通常我会按如下方式访问这个连接池:

fn get_data(conn: db::MyDatabasePool) -> MyModel {
    MyModel::get(&conn)
}
Run Code Online (Sandbox Code Playgroud)

但是,在 impl 块中,FromRequest我不能只将conn参数添加到函数的参数列表中from_request。如何在请求保护之外访问我的连接池?

rust rust-diesel rust-rocket

1
推荐指数
1
解决办法
623
查看次数

标签 统计

rust ×3

rust-diesel ×2

generics ×1

postgresql ×1

rust-rocket ×1