使用动态参数查询 Diesel 表
Posted
技术标签:
【中文标题】使用动态参数查询 Diesel 表【英文标题】:Querying a Diesel table with dynamic parameters 【发布时间】:2017-07-22 07:16:41 【问题描述】:我开始研究使用 Diesel 来查询数据库。我有一个类似于下面结构的表格(这只是一个玩具项目,可帮助我了解 Diesel 的工作原理)。
#[derive(Queryable, Insertable)]
#[table_name="posts"]
struct Post
id: String,
title: String,
body: String,
published: bool
例如,在编译时进行完全确定的查询很容易
posts.select(id, title).order(title.desc());
我不清楚的是如何根据一些运行时参数构建查询,而不必回退到 SQL。例如JSONAPI 允许动态选择字段并根据查询参数对其进行排序。我将如何在 Diesel 中做到这一点?
【问题讨论】:
【参考方案1】:使用盒装特征:
let mut q = dsl::constants.into_boxed();
if let Some(sid) = msg.0
q = q.filter(dsl::id.eq(sid));
let items = q
.order(dsl::id)
.load::<Constant>(conn)
.expect("Can't load Constant");
Ok(items)
【讨论】:
如何解决原始问题的“动态选择字段”部分?动态字段选择是否需要使用返回数据的较低级别视图?以上是关于使用动态参数查询 Diesel 表的主要内容,如果未能解决你的问题,请参考以下文章
使用 Diesel、r2d2 和 r2d2-diesel 查询数据库时出错
当使用与 tokio-diesel 关联时,“参数要求为 `'static` 借用 `record`”
尝试使用 Diesel 查询时溢出评估要求`_:Sized`