注意:这是一个与How to use sqlx to query mysql IN a slice?相似但不重复的问题。我要的是the Rust one。
这就是我努力做的。
let v = vec![..];
sqlx::query("SELECT something FROM table WHERE column IN (?)").bind(v)
...
然后我得到了以下错误
the trait bound `std::vec::Vec<u64>: sqlx::Encode<'_, _>` is not satisfied
2条答案
按热度按时间9o685dep1#
答案在FAQ https://github.com/launchbadge/sqlx/blob/master/FAQ.md的第一个
**我如何做一个选择... WHERE foo IN(.)query?**在0.6中,SQLx将支持绑定数组作为每个数据库的逗号分隔列表,但不幸的是,目前SQLx本身没有通用的解决方案。您需要手动生成查询,此时它不能与宏一起使用。
efzxgjgh2#
错误显示
Vec
不是一个必须作为有效DB值的Encode
。Encode
doc列出了所有实现了trait的Rust类型。Vec
不是一个。您可以使用以下方式将IN中的参数与vector的值绑定。首先,你需要扩大的数量'?“的值与参数的个数相同。然后,您需要调用
bind
来逐个绑定这些值。注意:如果目标数据库不是MySQL,需要使用$n,比如$1,$2,而不是?,作为参数占位符。