nodjes读取csv文件插入mysql操作

问题描述

前台上传文件,后台用fast-csv模块读取文件并插入,希望插入完成以后要返回给前台,所以采用了promise,但是好像吧并没有起作用,几千行会有数据没有插入数据库,大文件会中途停止执行,希望能多多指点,谢谢

问题出现的环境背景及自己尝试过哪些方法

nodejs的异步执行机制,采用过await/async,promise,都不是很管用。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

//
query2 = (sql, params = []) => {
    return new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => {
        if (err) {
          return reject(err);
        }
        connection.query(sql, params, (err, result) => {
          connection.release();
          if (err) {
            return reject(err);
          }
          resolve(result);
        });
      });
    });
  };
  
  var    sql = "INSERT INTO tf_m_section_number VALUES ?";
  var datas=new Array();
  var pList=new Array();
    fs.createReadStream(fPath)
  .pipe(csv())
  .on("data", function(data){
      counts++;
    if(count<700)
        datas[count++]=data;
    // if(count==3)
    //     console.log(datas);
     if(count==700) {
         console.log(count);
         pList.push(query(sql,[datas]));
        //console.log(result);
        count=0;
        datas.length = 0;
    }
   //  rows[count++]=row;
 })
  .on("end",function(){    
    console.log(counts);
      console.log("done");
    if(count>0){
        pList.push(query(sql,[datas]));
    //    console.log(result);
        //return res.send("ok");
            
    }
    Promise.all(pList).then(function(result) {
        // you code...
        return res.send("ok");
    });
    //
  }).on('error',(err)=>{console.log('读取文件时发生异常',err);});

  

你期待的结果是什么?实际看到的错误信息又是什么?

数据能全部读入数据库,事实上会有些数据丢失了

阅读 4.3k
1 个回答

给个思路,把第一遍插入的表复制一份出来,然后清空原表,再导入一遍,看看前后导入的两表丢失的数据:
若丢失的数据都是一样的,那么单独弄个csv只包含缺失的那部分数据,再试试导入这份csv,看看报什么错;
若丢失的数据很随机,那么还需要再具体看看。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题