rust - Rusqlite 插入多行
问题描述
如何使用 rusqlite 在单个查询中插入多行?查看下面的语法,我认为它失败了,因为查询期望 Vec 中只有一个值。
可以使用任何类型的辅助函数来完成,还是我必须完整地创建查询?
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
解决方案
我是否必须完整地创建查询?
有理由确定是这个。
据我所知,rusqlite 不提供任何类型的批处理 API,因此您有两种选择:
动态创建多值查询,例如
let placeholders = names.iter().map(|_| "(?)").collect::<Vec<_>>().join(", "); let q = format!("INSERT INTO cats (name) VALUES {}", placeholders); ... conn.execute(q, names) ...
prepare
查询,然后execute
在循环中(在事务中)
第一个可能是最有效的,但它也更粗糙,更不安全,更难调试。
推荐阅读
- python - 模型没有在 Django 中注册到管理员?
- elasticsearch - Elasticsearch 通过计数查询 DSL 过滤器
- reactive-programming - 无法从列表转换
> 列出 - google-cloud-platform - 如何在 GCP 云 SQL 中编辑机器类型
- nestjs - UseFilters NestJS 在 RcpException 时不起作用
- reactjs - React Saga 方法调用某些 Redux 方法 - 但是否可以解耦这个硬编码链接并使用 await 组合单个调用?
- c# - 如何模拟 Current.Request.ApplicationPath(API 方法调用了 VirtualPathUtility.ToAbsolute)
- python - 为什么没有将字符串写入临时文件?
- python - 如何显示枚举中是否有重复项
- node.js - 从 nodemailer 中的 godaddy 托管电子邮件发送电子邮件