var fs = require('fs'); var parser = require('topsin.parser'); var db = require('topsin.database'); // 获取csv的数据 function getCsvArr(path){ var file = fs.openFile(path); // 获取文件流 file.setCodec('UTF-8'); // 设置编码 var csvstr = file.readAll(); // 获取csv字符串 var csvdata = parser.parseCsvStr(csvstr); // 转变为数组 csvdata.shift(); // 除去第一行 return csvdata; } var res = getCsvArr('./confirmation-201912270900(1).csv'); // 创建数据库连接 db.addConnection({ database_type:'pg', database_host:'139.196.104.13:5433', database_name:'PMO_TRAINING', database_user:'toplinker', database_pwd:'TopLinker0510' }, "Scott_PMO_TRAINING"); // 封装数据库的操作 function Query(db,table,connectName){ this.db = db; this.table = table; this.normal = function(callback){ // 自定义 return this.db.query(connectName,callback); } this.getAllData = function(){ // 获取所有数据 var that = this return this.db.query(connectName,function(q){ return q.selectArrayMap({ table:that.table, field: '*', field_format:{"tags":'array', attr_data:'json'} }); }) } this.getKeys = function(){ // 查询所有字段 return this.normal(function(q){ return q.getFieldList('sec_production_order_confirmation_2') }); } } var query = new Query(db,'sec_production_order_confirmation_2','Scott_PMO_TRAINING'); // 获取数据库的字段 var keys = query.getKeys(); // 查看数据list var list = query.getAllData() // 是否需要扩展列 function getkeyCount(){ var res = 0; for(var keycount in list[0]){ if(list[0][keycount] !== undefined){ res++; } } return res-1 } if(getkeyCount() !== res[0].length){ console.log("需要更新前面数据") // 要更新的前面数量 var updateRows = res.length - list.length var updatelen = getkeyCount() - res[0].length var updateObj = {} for(var i = 1;i<=updateRows;i++){ updatelen.map(function(v){ updateObj[keys[getkeyCount()+1+v]] = res[i-1][res[0].length+v] }) query.normal(function(q){ q.updateRow({ table:'sec_production_order_confirmation_2', data:updateObj, where:{id: i}, update_policy:{tags:'array_append', attr_data:'json_merge'} }) }) } } // 是否需要插入多数据 if (list.length !== res.length){ // 执行插入 var insertMany = res.splice(list.length) insertMany = insertMany.map(function(v){ var obj = {} v.map(function(v2, i2){ obj[keys[i2+1]] = v2 }) return obj }) query.normal(function(q){ q.batchInsert( 'sec_production_order_confirmation_2', keys.splice(1,res[0].length), insertMany ); }) } console.log(query.normal(function(q){ return q.selectMap({ table:'sec_production_order_confirmation_2', field: '*', field_format:{tags:'array', attr_data:'json'}, limit: 1, order:'id DESC' }); })) // console.log(res[res.length-1])