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

标签 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 中?

最佳答案

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

我使用 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-Using normal callback

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-Using promises

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-Using async await

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

关于mysql - 使用 Node JS 将记录数组插入 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33723845/

相关文章:

c# - BulkInsert - 空间 'CSSpace' 没有关联的集合

MySQL:将结果设置为逗号后两位数

php - 获取上次查询中插入的记录/获取更改的行数(MySQL)

php - foreach循环中的mysql更新

javascript - 从 Node js 中的对象获取值

node.js - 多种护照本地策略

asp.net - SQL Server 2008批量插入

sql - 使用格式文件在 SQL 中批量插入 csv 以删除双引号

php - 如何从具有相同 catID 的表中获取一个结果并从另一个表中获取多个结果?

node.js - Laravel Forge - Node.js Websocket 超时