【发布时间】:2017-08-25 13:13:57
【问题描述】:
背景:
我有很大的 CSV 文件(大约 100K),我正在使用 papaparse 逐块解析它。遇到块时,我将块插入到 sqlite 数据库表中。
我正在使用react 和redux-thunk,函数uploadData 是动作调度器。
问题: 并非所有行都插入到 sqlite 表中。每次我运行方法时,都会插入不同数量的行。
我尝试过的:
我尝试在插入块之前添加BEGIN TRANSACTION 和COMMIT 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