如何一次添加多个 sql_query 绑定?

Posted

技术标签:

【中文标题】如何一次添加多个 sql_query 绑定?【英文标题】:How to add multiple sql_query binds at once? 【发布时间】:2021-12-07 05:52:51 【问题描述】:

我正在使用柴油箱与 PostgreSQL 数据库进行通信。 我有一个用例,我想从表preferences 中获取数据到结构Preferences 中。 我希望数据库的输出由表中的两个字段过滤,在org_id 列中具有特定值,并在team_id 列中的值组中,我将它们的值存储在未知长度数组中,所以我不能做 sql_query(raw_sql).bind::<>().execute() 因为我不知道人数 bind::<>() 然后我尝试使用collect_binds 但它没有用,尝试执行以下操作

let mut filter = "".to_string();
let mut params:Vec<i64> = vec![];
let mut c =1;
let org_id = 10;

filter.push_str("(org_id=$1 AND team_id IN (");
params.push(org_id);
for team_id in get_needed_teams_id()
     c = c +1;
     filter.push_str(&*format!("$", c));
     params.push(team_id );

filter.push_str("))");


let raw_sql = format!("SELECT * FROM preferences WHERE  ORDER BY user_id ASC, team_id ASC", filter);

let preferences:Vec<Preferences> = vec![];
let sql_res = sql_query(raw_sql).collect_binds(&mut param, &preferences);

返回错误:

error[E0284]: type annotations needed: cannot satisfy `<_ as Backend>::BindCollector == Vec<i64>`
   --> src\db\preference_db.rs:146:38
    |
146 |     let sql_res = sql_query(raw_sql).collect_binds(&mut params, &preferences);
    |                                      ^^^^^^^^^^^^^ cannot satisfy `<_ as Backend>::BindCollector == Vec<i64>`

【问题讨论】:

【参考方案1】:

目前在diesel 中无法在一个循环中一次绑定多个参数。 collect_binds 与此完全无关,并由 QueryFragment 特征导出。数据库连接实现可以使用它来接收给定查询的绑定参数列表,而不是构造查询。

【讨论】:

以上是关于如何一次添加多个 sql_query 绑定?的主要内容,如果未能解决你的问题,请参考以下文章

原生jsjs动态添加dom,如何绑定事件

WPF Image控件如何根据数据状态绑定不同的图片

Angular 2 通过 [class.className] 绑定添加多个类

Bluehost主机怎么绑定多个域名,建多个站

WPf:一次绑定多个属性

JQuery事件与动画