如何解决有什么办法可以重用相同的结构,还是我需要在Rust中构建一个新的结构?
我在postgres中获得了这张桌子
create table tasks_users(
id serial primary key,user_id smallint,task_id integer,created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,deleted_at TIMESTAMP WITH TIME ZONE
)
有了这个
table_name | column_name | data_type
-------------+-------------+--------------------------
tasks_users | id | integer
tasks_users | user_id | smallint
tasks_users | task_id | integer
tasks_users | created_at | timestamp with time zone
tasks_users | deleted_at | timestamp with time zone
我有这个结构
#[derive(Serialize,Deserialize,Queryable,PostgresMapper)]
#[pg_mapper(table = "tasks_users")]
pub struct TaskUsers {
pub id: i32,pub user_id: i16,pub task_id: Option<i32>,pub created_at: DateTime<Utc>,pub deleted_at: Option<DateTime<Utc>>,}
我正在用这个查询:
pub async fn get_users_by_tasks(
client: &Client,task_id: i32,) -> Result<Vec<TaskUsers>,io::Error> {
let statement = client
.prepare("select id,user_id,created_at from tasks_users where task_id = $1 and deleted_at is null")
.await
.unwrap();
let usuarios = client
.query(&statement,&[&task_id])
.await
.expect("Hubo un error al recuperar los usuarios de una tarea")
.iter()
.map(|row| TaskUsers::from_row_ref(row).unwrap())
.collect::<Vec<TaskUsers>>();
Ok(usuarios)
}
但是,当我遇到此错误
thread 'actix-rt:worker:0' panicked at 'called `Result::unwrap()` on an `Err` value: UnkNownTokioPG("invalid column `task_id`")',
解决方法
其中有PostgresMapper的衍生https://docs.rs/postgres-mapper-derive/0.1.1/src/postgres_mapper_derive/lib.rs.html#120的实现细节(目前看来github存储库不可用)。
该实现要求所有字段都在提供的行中显示。
作为一种可能的解决方案,您可以从表中选择所有必需的列:
--- .prepare("select id,user_id,created_at from tasks_users where task_id = $1 and deleted_at is null")
+++ .prepare("select id,created_at,task_id,deleted_at from tasks_users where task_id = $1 and deleted_at is null")
或者您可以创建具有匹配字段的自定义结构。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。