如何在Rust SQLx中更简洁获取单列String结果(无需包装结构体)?
无需包装结构体获取SQLx单列String的简洁方法
可以直接使用SQLx提供的query_scalar方法,它专门用于处理单列查询结果,无需定义包装结构体或手动迭代映射:
pub async fn page( Extension(pool): Extension<PgPool>, ... ) -> PageTemplate { // 直接获取单列String集合 let foos: Vec<String> = sqlx::query_scalar(r#"SELECT foo FROM bar GROUP BY foo"#) .fetch_all(&pool) .await .unwrap(); // 后续业务逻辑... }
补充说明
query_scalar会自动将查询返回的单列数据映射为指定类型(这里是String),只要目标类型实现了sqlx::Typetrait,而String对PostgreSQL等主流数据库是默认支持的。- 如果需要流式处理大量数据,避免一次性加载全部到内存,可以用
fetch方法配合迭代:let mut rows = sqlx::query_scalar(r#"SELECT foo FROM bar GROUP BY foo"#) .fetch(&pool); while let Some(foo) = rows.next().await.unwrap() { // 逐个处理每个String值 }
内容的提问来源于stack exchange,提问作者fadedbee
相关产品推荐
相关产品推荐

