使用Node JS将记录数组插入mysql

时间:2015-11-15 19:17:42

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

我有一些像

这样的数据
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中?

1 个答案:

答案 0 :(得分:0)

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

我使用array reduce来获得像这样的数组

import string
with open("file.txt", "r") as file:
    for line in file:
        if all( c in string.printable for c in line):
            print line

这将输出

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);

现在插入mysql数据库

  

1-使用常规回调

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

因此,多个数据插入的格式应类似于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); }); });

  

2-使用承诺

[[[a,b],[b,c],[d,k]]]
  

3-使用异步等待

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);
      })