前两天,有个两DB之间的数据导出导入的需求。对方提供的是excel表,我这边是mysql数据库,excel表第一行是字段名,之后的行是记录的值。
其实没有多复杂,我先将exel转成csv,结果mysql导入csv,第一行记录就没能成功导入,排错起来够折腾的,需要仔细检查每个字段的值,关键是这个表够宽的,果断放弃。
干脆写几行代码读取excel获取数据后,直接添加到mysql数据库里去。
下面是node.js代码,使用node-xlsx读excel文件,使用mysql2对接mysql数据库
//excel2json.jsconst xlsx = require("node-xlsx");const mysql = require("mysql2/promise"); const localpool= mysql.createPool({host:"127.0.0.1",port:3306,user:"demouser",password:"XXXXXX",database:"demodb",jsonStrings: true,waitForConnections: true,connectionLimit: 4,enableKeepAlive: true, keepAliveInitialDelay: 5000,});let excelfile=process.argv.slice(2)[0];
let workbook =xlsx.parse(excelfile);
datalist=workbook[0].data;let jlist=[];for (i=1;i<datalist.length;i++){jitem=[];for (j=0;j<datalist[0].length;j++) jitem.push(datalist[i][j]||"");jlist.push(jitem);}let addrecs = "insert into demodb.demotable("+datalist[0].join()+") values ?" ;localpool.query(addrecs,[jlist]).then(([results])=>{ console.log(results); }).catch(err=>{console.log(err);});
600多条记录,一条插入命令搞定,当然如果记录比较多的话,可以考虑分批插入。