sql - knex 插入多行
问题描述
我在使用 knex 将许多行插入 postgres db 时遇到问题。我有需要插入的动态行数。我期望的结果是:
插入行四次(例如四次。我不知道插入的确切数量,因为它来自前端动态):
- field_id在每一行中都不同:(1,2,3,4) - 我有这些 ID 的数组
- id_of_product将始终相同
- 值总是不同的:(来自前端的req.body [id])-括号中的ID与数组中的field_id值相同
我怎样才能做到这一点?我尝试用 forEach 循环它,但它是异步操作,所以我不能使用 .then(),因为它会被调用四次
这是我尝试过的。我不知道如何设置 field_id 和 req.body 以动态获取它。
字段 = [1,2,3,4]
预期结果:
knex 创建 4 个插入如下: field_id: 1, product_id: some static id value: frontValue[1] ETC
knex('metadata').insert(
[{ field_id: fields,
product_id: product_id,
value: req.body[fields]
}]
)
解决方案
如果我理解正确,您想在metadata
表中插入 4 条记录:
{ field_id: 1, product_id: X, value: req.body[1] },
{ field_id: 2, product_id: X, value: req.body[2] },
{ field_id: 3, product_id: X, value: req.body[3] },
{ field_id: 4, product_id: X, value: req.body[4] }
要在同一个语句中插入多条记录,它们每个都需要是您提供给 Knex 的数组中的单独元素(查看insert
文档以获取更多示例):
const product_id = X;
const fieldsToInsert = fields.map(field =>
({ field_id: field, product_id, value: req.body[field] }));
return knex('metadata').insert(fieldsToInsert)
.then(() => { /* handle success */ })
.catch(() => { /* handle failure */});
推荐阅读
- r - 评估多个选项之间一点的最近距离?
- crystal-reports - 如何在 CrystalReport 条形图上显示缺失数据(显示值 = 0 或 null 的条形)
- javascript - FlatList 条件样式未按预期工作
- java - 我们应该在 Java 中使用带有构建器方法的常量吗?
- python - 如何在带有Flask框架的浏览器上实时显示python脚本执行语句的进度?
- r - 使用对话框的函数错误地执行错误的语句
- flutter - 使用 flutter_bloc 构建 Flutter App 的架构
- powershell - 修补应用程序的 Microsoft Graph API 权限
- laravel - 如何从数据库中将“性别”列显示到 Laravel 中的图表?
- python-3.x - 获取输入图像处理它并在 tkinter 中返回输出