【问题标题】:SQLITE3: csv parsing and row insertion using papa parseSQLITE3:使用 papa 解析的 csv 解析和行插入
【发布时间】:2017-08-25 13:13:57
【问题描述】:

背景: 我有很大的 CSV 文件(大约 100K),我正在使用 papaparse 逐块解析它。遇到块时,我将块插入到 sqlite 数据库表中。 我正在使用reactredux-thunk,函数uploadData 是动作调度器。

问题: 并非所有行都插入到 sqlite 表中。每次我运行方法时,都会插入不同数量的行。

我尝试过的: 我尝试在插入块之前添加BEGIN TRANSACTIONCOMMIT TRANSACTION。但是没用。

下面是函数sn-p。

 export function uploadData(file) {
  return (dispatch) => {
    var db = new sqlite3.Database(decodeURI(Constants.DB_PATH));
    dispatch(bfUploadStatus({ loading: true, status: false }));
    return db.serialize(function() {
      db.run(`PRAGMA KEY = 'secret'`);
      db.run(`PRAGMA CIPHER = 'aes-128-cbc'`);
      db.run(`DROP TABLE IF EXISTS bf`);
      db.run(`CREATE TABLE bf (
        A TEXT, B TEXT, C TEXT, D TEXT, E TEXT, F TEXT, G TEXT, H TEXT, I TEXT, J TEXT, K TEXT, L TEXT, M TEXT, N TEXT, O TEXT, P TEXT, Q TEXT, R TEXT, S TEXT, T TEXT, U TEXT, V TEXT, W TEXT, X TEXT, Y TEXT, Z TEXT,
        AA TEXT, AB TEXT, AC TEXT, AD TEXT, AE TEXT, AF TEXT, AG TEXT, AH TEXT, AI TEXT, AJ TEXT, AK TEXT, AL TEXT, AM TEXT, AN TEXT, AO TEXT, AP TEXT, AQ TEXT, AR TEXT, ASA TEXT, AT TEXT, AU TEXT, AV TEXT, AW TEXT, AX TEXT, AY TEXT, AZ TEXT,
        BA TEXT, BB TEXT, BC TEXT, BD TEXT, BE TEXT, BF TEXT, BG TEXT, BH TEXT, BI TEXT, BJ TEXT, BK TEXT, BL TEXT, BM TEXT, BN TEXT, BO TEXT, BP TEXT, BQ TEXT, BR TEXT, BS TEXT, BT TEXT, BU TEXT, BV TEXT, BW TEXT, BX TEXT, BY TEXT, BZ TEXT,
        CA TEXT, CB TEXT, CC TEXT, CD TEXT, CE TEXT, CF TEXT, CG TEXT, CH TEXT, CI TEXT, CJ TEXT, CK TEXT, CL TEXT, CM TEXT, CN TEXT, CO TEXT, CP TEXT, CQ TEXT, CR TEXT, CS TEXT, CT TEXT, CU TEXT, CV TEXT, CW TEXT, CX TEXT, CY TEXT, CZ TEXT,
        DA TEXT, DB TEXT, DC TEXT, DD TEXT, DE TEXT, DF TEXT, DG TEXT, DH TEXT, DI TEXT, DJ TEXT)`);
      const stmt = db.prepare('INSERT INTO bf VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');

      Papa.parse(file, {
        chunk: (results) => {
          console.log(results);
          db.run(`BEGIN TRANSACTION`);
          forEach(results.data, (result) => {
            stmt.run(result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15], result[16], result[17], result[18], result[19], result[20], result[21], result[22], result[23], result[24], result[25], result[26], result[27], result[28], result[29], result[30], result[31], result[32], result[33], result[34], result[35], result[36], result[37], result[38], result[39], result[40], result[41], result[42], result[43], result[44], result[45], result[46], result[47], result[48], result[49], result[50], result[51], result[52], result[53], result[54], result[55], result[56], result[57], result[58], result[59], result[60], result[61], result[62], result[63], result[64], result[65], result[66], result[67], result[68], result[69], result[70], result[71], result[72], result[73], result[74], result[75], result[76], result[77], result[78], result[79], result[80], result[81], result[82], result[83], result[84], result[85], result[86], result[87], result[88], result[89], result[90], result[91], result[92], result[93], result[94], result[95], result[96], result[97], result[98], result[99], result[100], result[101], result[102], result[103], result[104], result[105], result[106], result[107], result[108], result[109], result[110], result[111], result[112], result[113]);
          });
          db.run(`COMMIT TRANSACTION`);
        },
        error: (err) => {
          dispatch(bfUploadStatus({ loading: false, status: false }));
        },
        complete: (results) => {
          stmt.finalize();
          db.close();
          return dispatch(bfUploadStatus({ loading: false, status: true }));
        }
      })
    });
  }
}

【问题讨论】:

    标签: javascript reactjs csv sqlite papaparse


    【解决方案1】:

    虽然没有找到确切的根本原因,但我猜问题出在提交事务上。更改如下代码插入所有数据。

    export function uploadData(file) {
      return (dispatch) => {
        var db = new sqlite3.Database(decodeURI(Constants.DB_PATH));
        dispatch(bfUploadStatus({ loading: true, status: false }));
        return db.serialize(function() {
          db.run(`PRAGMA KEY = 'secret'`);
          db.run(`PRAGMA CIPHER = 'aes-128-cbc'`);
          db.run(`DROP TABLE IF EXISTS bf`);
          db.run(`CREATE TABLE bf (
            A TEXT, B TEXT, C TEXT, D TEXT, E TEXT, F TEXT, G TEXT, H TEXT, I TEXT, J TEXT, K TEXT, L TEXT, M TEXT, N TEXT, O TEXT, P TEXT, Q TEXT, R TEXT, S TEXT, T TEXT, U TEXT, V TEXT, W TEXT, X TEXT, Y TEXT, Z TEXT,
            AA TEXT, AB TEXT, AC TEXT, AD TEXT, AE TEXT, AF TEXT, AG TEXT, AH TEXT, AI TEXT, AJ TEXT, AK TEXT, AL TEXT, AM TEXT, AN TEXT, AO TEXT, AP TEXT, AQ TEXT, AR TEXT, ASA TEXT, AT TEXT, AU TEXT, AV TEXT, AW TEXT, AX TEXT, AY TEXT, AZ TEXT,
            BA TEXT, BB TEXT, BC TEXT, BD TEXT, BE TEXT, BF TEXT, BG TEXT, BH TEXT, BI TEXT, BJ TEXT, BK TEXT, BL TEXT, BM TEXT, BN TEXT, BO TEXT, BP TEXT, BQ TEXT, BR TEXT, BS TEXT, BT TEXT, BU TEXT, BV TEXT, BW TEXT, BX TEXT, BY TEXT, BZ TEXT,
            CA TEXT, CB TEXT, CC TEXT, CD TEXT, CE TEXT, CF TEXT, CG TEXT, CH TEXT, CI TEXT, CJ TEXT, CK TEXT, CL TEXT, CM TEXT, CN TEXT, CO TEXT, CP TEXT, CQ TEXT, CR TEXT, CS TEXT, CT TEXT, CU TEXT, CV TEXT, CW TEXT, CX TEXT, CY TEXT, CZ TEXT,
            DA TEXT, DB TEXT, DC TEXT, DD TEXT, DE TEXT, DF TEXT, DG TEXT, DH TEXT, DI TEXT, DJ TEXT)`);
          const stmt = db.prepare('INSERT INTO bf VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
          db.run(`BEGIN TRANSACTION`);
          Papa.parse(file, {
            chunk: (results) => {
              console.log(results);
    
              forEach(results.data, (result) => {
                stmt.run(result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15], result[16], result[17], result[18], result[19], result[20], result[21], result[22], result[23], result[24], result[25], result[26], result[27], result[28], result[29], result[30], result[31], result[32], result[33], result[34], result[35], result[36], result[37], result[38], result[39], result[40], result[41], result[42], result[43], result[44], result[45], result[46], result[47], result[48], result[49], result[50], result[51], result[52], result[53], result[54], result[55], result[56], result[57], result[58], result[59], result[60], result[61], result[62], result[63], result[64], result[65], result[66], result[67], result[68], result[69], result[70], result[71], result[72], result[73], result[74], result[75], result[76], result[77], result[78], result[79], result[80], result[81], result[82], result[83], result[84], result[85], result[86], result[87], result[88], result[89], result[90], result[91], result[92], result[93], result[94], result[95], result[96], result[97], result[98], result[99], result[100], result[101], result[102], result[103], result[104], result[105], result[106], result[107], result[108], result[109], result[110], result[111], result[112], result[113]);
              });
    
            },
            error: (err) => {
              dispatch(bfUploadStatus({ loading: false, status: false }));
            },
            complete: (results) => {
              db.run(`COMMIT TRANSACTION`);
              stmt.finalize();
              db.close();
              return dispatch(bfUploadStatus({ loading: false, status: true }));
            }
          })
        });
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 2012-12-11
      • 2014-12-03
      相关资源
      最近更新 更多