如何使用rusqlite在单个查询中插入多行?查看下面的语法,我认为它失败了,因为查询期望Vec中只有一个值。
是否可以使用任何类型的helper函数来完成,或者我是否必须创建完整的查询?
let mut names = Vec::new();
names.push("Mittens");
names.push("Jingle Paws");
names.push("Sir Fluffy");
match conn.execute(
"INSERT INTO cats (name) VALUES (?1)",
names,
) {
Ok(_t) => (),
Err(e) => {
let gil = Python::acquire_gil();
let py = gil.python();
let error_message = format!("Error inserting cats into database! {}", e.to_string());
PyIOError::new_err(error_message).restore(py);
return Err(PyErr::fetch(py));
}
};OSError: Error inserting cats into database! Wrong number of parameters passed to query. Got 2, needed 1发布于 2021-01-19 19:10:11
我是否必须创建完整的查询?
我很确定就是这个。
据我所知,rusqlite没有提供任何类型的批处理API,因此您有两个选择:
让placeholders = names.iter().map(|_| "(?)").collect::>().join(",");让Q= format!("INSERT INTO cats (name) VALUES {}",placeholders);...conn.execute(q,names) ...
对查询执行
prepare操作,然后在循环中(在transaction)中)执行execute操作
第一种可能是最有效的,但它也更粗糙,不太安全,更难调试。
https://stackoverflow.com/questions/65789938
复制相似问题