【问题标题】:Node mysql bulk insert with express array parameter带有快速数组参数的节点mysql批量插入
【发布时间】: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

【问题讨论】:

    标签: mysql arrays node.js


    【解决方案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],我将很乐意接受它,以便帮助其他人解决类似问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2019-03-18
    • 2011-06-07
    • 2022-01-25
    • 2017-05-01
    相关资源
    最近更新 更多