rust - 有什么方法可以重用相同的结构,还是我需要在 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, user_id, created_at, task_id, deleted_at from tasks_users where task_id = $1 and deleted_at is null")
或者您可以创建具有匹配字段的自定义结构。
推荐阅读
- c# - 使用 c# 将条件格式复制到 Outlook 邮件正文中
- python - 使用 GeoPandas 创建头部图,调整后的图像很小 - 如何更改比例?
- c# - 如何配置 routeConfig.cs 在根域之后直接接受输入
- vba - 如何获取特定字体颜色内的字符串(向文本添加内容,而不是更改颜色) Find.Text 为空
- apache-kafka - Kafka 未重新启动 - 已清除日志、磁盘空间。重新启动但它一次又一次地关闭
- python - 如何在python的两个列表中获得相同的布尔值
- python - 每当我运行此代码时,它都会向我显示 requests.exceptions.ConnectionError: HTTPSConnectionPool 错误
- python - 使用 QtQuick.Controls 中的任何内容都会引发受保护的模块错误
- angular - IdentityServer4 - Angular 如何将默认登录页面更改为 Angular 组件
- python-3.x - 安装 Kivy 模块时出错