如何一次添加多个 sql_query 绑定?
How to add multiple sql_query binds at once?
我正在使用 diesel crate 与 PostgreSQL 数据库进行通信。
我有一个用例,我想从 table preferences
中获取数据到结构 Preferences
中。
我希望数据库的输出被 table 中的两个字段过滤,在 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= 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>`
目前在 diesel 中无法在一个循环中同时绑定多个参数。 collect_binds
与此完全无关,并由 QueryFragment
特征导出。数据库连接实现可以使用它来接收给定查询的绑定参数列表,而不是构造查询。
我正在使用 diesel crate 与 PostgreSQL 数据库进行通信。
我有一个用例,我想从 table preferences
中获取数据到结构 Preferences
中。
我希望数据库的输出被 table 中的两个字段过滤,在 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= 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>`
目前在 diesel 中无法在一个循环中同时绑定多个参数。 collect_binds
与此完全无关,并由 QueryFragment
特征导出。数据库连接实现可以使用它来接收给定查询的绑定参数列表,而不是构造查询。