0
上下文: 我有大的CSV文件(大約100K),我用papaparse chunkwise解析。在遇到一個塊時,我將塊插入到sqlite數據庫表中。 我正在使用react
和redux-thunk
,函數uploadData是動作調度器。SQLITE3:使用papa解析csv解析和行插入
問題: 並非所有的行都插入sqlite表中。每次運行方法時,插入的行數都不相同。
我曾嘗試: 我曾嘗試插入塊之前添加BEGIN TRANSACTION
和COMMIT TRANSACTION
。但沒有奏效。
以下是函數代碼片段。
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 }));
}
})
});
}
}