【问题标题】:Insert array of records into mysql with Node JS使用Node JS将记录数组插入mysql
【发布时间】:2016-02-16 20:53:37
【问题描述】:

我有一个类似的数据数组

var records = [
               {Name: '', Id: 1},
               {Name: '', Id: 2},
               {Name: '', Id: 3},
               {Name: '', Id: 4},
               {Name: '', Id: 5},
               {Name: '', Id: 6}
              ];

记录数组中可能有数千个项目...

问题1:我们可以创建一个存储过程来接受mysql中的对象数组吗?

问题 2:有没有办法用 Node JS 将这些数据批量插入到 mysql 中?

【问题讨论】:

    标签: mysql node.js bulkinsert node-mysql bulkloader


    【解决方案1】:

    您可以批量插入记录数组,但在此之前您可能需要将其转换为数组数组

    我使用 array reduce 来得到一个类似这样的数组

    let j=[
                   {Name: '', Id: 1},
                   {Name: '', Id: 2},
                   {Name: '', Id: 3},
                   {Name: '', Id: 4},
                   {Name: '', Id: 5},
                   {Name: '', Id: 6}
                  ];
    
                  let values=j.reduce((o,a)=>{
                        let ini=[];
                        ini.push(a.Name);
                        ini.push(a.Id);
                        o.push(ini);
                        return o
                  },[])
                  console.log(values);
    

    这将输出

    [["",1],["",2],["",3],["",4],["",5],["",6]]
    

    现在插入mysql数据库

    1-使用普通回调

    const con=require('./mysql.js'); //mysql connectionin mysql.js 
    
    var sql = "INSERT INTO customers (name, id) VALUES ?";
    con.query(sql, [values], function (err, result) { //pass values array (from above)  directly here
        if (err) throw err;
        console.log("Number of records inserted: " + result.affectedRows);
      });
    });
    

    所以多数据插入的格式应该是[[[a,b],[b,c],[d,k]]]

    2-使用承诺

    var Promise = require("bluebird");//for promises
    const promisecon=Promise.promisifyAll(require('./mysql.js'));//
      var sql = "INSERT INTO customers (name, id) VALUES ?";
        promisecon.queryAsync(sql,[values]).then((result)=>{//bluebird identifies with Async
          console.log(result);
        }).catch(function(err){
            console.log(err);
          })
    

    3-使用异步等待

     var sql = "INSERT INTO customers (name, id) VALUES ?";
    async function build() {
                try {
                  const result =await con.queryAsync(sql,[values]);
    
                     console.log(result);
    
                } catch (err) {
                  // do something
                }
              }
              build();
    

    【讨论】:

    • 有什么办法可以得到 insertID 的列表作为结果?
    • 你的意思是插入后创建的主键? @MoeFar
    • 是的,我正在寻找类似的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多