首页 > 解决方案 > 为什么查询列必须与锈柴油中的数据库相同

问题描述

我正在学习使用diesel( diesel = { version = "1.4.4", features = ["postgres"] })从PostgreSQL 13数据库中查询一些记录,这是我的查询代码:

#[get("/v1/playlist/detail/<req_playlist_id>")]
pub fn playlist_detail(req_playlist_id: i64) -> content::Json<String> {
    use crate::schema::playlist::dsl::*;
    let connection = config::establish_connection();
    let results = playlist.filter(id.eq(req_playlist_id))
            .limit(1)
            .load::<QueryPlaylist>(&connection)
            .expect("Error loading posts");

    let response_json = serde_json::to_string(&results).unwrap();
    return content::Json(response_json);
}

现在我发现QueryPlaylist列必须与数据库相同的问题,我无法删除列,因为编译会失败。让我困惑的是为什么列必须与数据库相同?我应该每次都查询每一列数据吗?如果我只想查询一列数据,我该怎么办?如果我想查询我想要的列,可以吗?这是我的查询模型:

#[derive(Insertable,Serialize,Queryable)]
#[table_name="playlist"]
pub struct QueryPlaylist {
    pub id: i64,
    pub creator: i64,
    pub name: String,
    pub cover_url: String,
    pub description: Option<String>,
    pub subscribed: Option<i32>,
    pub subscribed_count: Option<i64>,
    pub comment_count: Option<i64>,
    pub share_count: Option<i32>,
    pub play_count: Option<i32>
    //pub source: i32
}

这是我的柴油模式:

table! {
    playlist (id) {
        id -> Int8,
        creator -> Int8,
        name -> Varchar,
        cover_url -> Varchar,
        description -> Nullable<Varchar>,
        subscribed -> Nullable<Int4>,
        subscribed_count -> Nullable<Int8>,
        comment_count -> Nullable<Int8>,
        share_count -> Nullable<Int4>,
        play_count -> Nullable<Int4>,
        source -> Int4,
    }
}

标签: rust

解决方案


推荐阅读