带有快速数组参数的节点mysql批量插入
Posted
技术标签:
【中文标题】带有快速数组参数的节点mysql批量插入【英文标题】:Node mysql bulk insert with express array parameter 【发布时间】:2018-04-17 11:08:36 【问题描述】:我遇到了需要在我的 Node 项目中使用批量插入的情况。
这当然已经在这里回答了:How do I do a bulk insert in mysql using node.js
但是,我有一个用于创建 api 的 express 项目。参数变成了一个数组,我在使用该数组进行批量插入时遇到了问题。每当我尝试使用该路由时,都会收到 Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1
的错误消息
经过一番挖掘,我发现它试图插入:
['foo', 'bar', 'test']
当我需要插入时:
['foo']
['bar']
['test']
不管怎样,这是完整的代码:
路线
router.post("/", function (req, res, next)
db.query(
"REPLACE INTO user (`Name`) VALUES (?)",
[req.query.array],
function (error, response)
if (error) throw error;
console.log(response);
)
);
路由调用者
let requestUrl = "http://localhost:3000/user?";
// External api request which returns a list of users
for (let i = 0; i < body.users.length; i++)
requestUrl += `array=$body.users[i]&`
let addUserRequest =
url: requestUrl,
method: "POST"
;
request(addUserRequest, function (error, response, body)
console.log(body);
);
生成的url是:
http://localhost:3000/user?array=foo&array=bar&array=test
【问题讨论】:
【参考方案1】:试试这个,
var datatoDB = [];
req.query.array.forEach(function(entry)
console.log(entry);
datatoDB.push([entry]);
);
在这里,我们尝试将这个['foo', 'bar', 'test']
转换为这个[["foo"], ["bar"], ["test"]]
。
现在,在您的函数中使用 datatoDB。
router.post("/", function (req, res, next)
db.query(
"REPLACE INTO user (Name) VALUES ?",
[datatoDB],
function (error, response)
if (error) throw error;
console.log(response);
)
);
【讨论】:
所以你的方法更接近,它插入第一个值然后完成。然后,我再次回顾了我在帖子中提到的答案,并将其包装在另一个数组中,例如[datatoDB]
,但返回了相同的列计数错误。
看来我的 sql 语法是错误的,我确实需要那组额外的括号。如果您可以更改答案以使查询显示为REPLACE INTO user (Name) VALUES ?, [datatoDB]
,我将很乐意接受它,以便帮助其他人解决类似问题。以上是关于带有快速数组参数的节点mysql批量插入的主要内容,如果未能解决你的问题,请参考以下文章