大神们,帮帮忙!
- 这是一个sqlx的问题。sqlx查询完需要的数据,映射到自己定义的结构体。栗子
pub async fn query_param<'a, T,P>(pool:&Pool<MySql>,sql:&'a str,params:Option<P>) ->Result<Vec<T>>
where
//T是自己定义的映射的结构体
T:for<'r> sqlx::FromRow<'r, sqlx::mysql::MySqlRow> + std::marker::Unpin + std::marker::Send,
P:'a+ Send + Encode<'a, MySql> + Type<MySql> + std::marker::Sync,
{
let data:Vec<T>=sqlx::query_as(sql)
.bind(params)
.fetch_all(pool)
.await.map_err(AppError::from)?;
Ok(data)
}
//这是映射的结构体(基本类型都实现了相应的trait(i32,String等等))
//这就是上面的T
#[derive(Debug, FromRow)]
pub struct Category{
pub id:i32,
pub name:String,
pub is_del:bool,
}
- 问题来了,我想返回TopicView这个结构体,但是sqlx没有给time::SystemTime这个类型实现相应的trait。孩子不会了,前辈们,教教孩子怎么实现相应的trait。trait在下边。
#[derive(FromRow)]
pub struct TopicView{
pub id:i64,
pub title:String,
pub summary:String,
pub hit: i32,
//这里应该是dateline:time::SystemTime。但是SystemTime没有实现相应的trait。我把它拿出去实现trait
pub dateline:SysTime,
pub category_id:i32,
pub is_del:bool,
pub name:String,
}
pub struct SysTime(time::SystemTime);
impl Decode<'_,MySql> for SysTime{
fn decode<'r>(value: <MySql as sqlx::database::HasValueRef<'r>>::ValueRef) -> Result<Self, sqlx::error::BoxDynError> {
todo!()
}
}
impl Type<MySql> for SysTime{
fn type_info() -> <MySql as sqlx::Database>::TypeInfo {
todo!()
}
}
天冷了,朋友们记得添衣。
1
共 4 条评论, 1 页
评论区
写评论就用chrono吧。来回取数据挺方便的。我这sqlx的版本感人,哈哈。感谢指点。
谢谢!
👇
shanliu:
感谢推荐,用chrono了。谢谢
--
👇
Grobycn: 推荐用 chrono
推荐用 chrono