将CSV解析为MySQL表时更新现有记录

时间:2019-07-16 10:00:47

标签: node.js csv express parsing

我目前正在使用NodeJS,Express和Sequelize构建解决方案,其中CSV通过Sequelize将CSV移入MySQL DB的登台表中。这些文件已上传到本地文件夹并进行了解析,但是我现在需要创建一种机制,在该机制中检查表中的数据是否存在现有行,并更新或替换为新数据。希望通过解析来解决问题,并希望轻轻地将其放在肩膀上,以正确的方向引导我。

csv文件已加载到服务器,第二个POST操作将解析该文件并将其导入DB表。在新数据与表中的PK冲突之前,此方法非常有效。

router.post('/thirdparse', (req, res, next) => {

    var thirdInput = fs.createReadStream('/Users/route/to/csvfile/3rdParty.csv');
    var thirdParser = csv.parse({
        delimiter: ',',
        columns: true
    })

const thirdTransform = csv.transform(function(row) {
    let resultThird = {
        thirdP_received_date: row['Received Date'],
        thirdP_model: row['Model'],
        thirdP_tracking_number: row['Tracking Number'],
        thirdP_imei: row['IMEI'],
        thirdP_serial_number: row['Serial Number'],
        thirdP_new_serial: row['New IMEI'],
        thirdP_new_imei: row['New Serial'],
        thirdP_repair_outcome: row['Repair Outcome'],
        thirdP_dispatch_date: row['Dispatch Date'],
        thirdP_notes: row['Notes']
    }
    Third.create(resultThird)
        .then(function() {
            res.send('complete')
        })
        .catch(function(err) {
            res.send('Error encountered: ' + err)
        })
})

thirdInput.pipe(thirdParser).pipe(thirdTransform)
})

当前,如果IMEI已经存在,则解析将出错并返回验证错误。我正在寻找一种方法,如果可能的话,将数据从表中删除并替换为最新的csv文件中的数据,或者用新数据更新的行中的数据

0 个答案:

没有答案