node.js + sequelize bulk insert

时间:2018-06-05 18:16:35

标签: node.js sequelize.js bulkinsert

我是node.js和sequelize的新手。我已经构建了一个带有sequelize的mysql数据库,它符合我对实际项目的需求。

然后我搜索了用sequelize填充数据库的可能性,将它与csv文件结合起来的方法对我来说似乎是最好的解决方案。

我有三个单独的表的三个csv文件,并在github https://gist.github.com/evansiroky/167f218bb5342bff80c6#file-sequelizebulkinsert-js上找到了Evan的脚本

有人可以帮我解决我是如何实施这项工作的吗?我知道这一定是一个非常基本的问题,但我不知道如何。

1 个答案:

答案 0 :(得分:1)

如果您只想使用数据填充数据库,您仍然可以使用mysql的mysqlimport或其他工具以旧式方式进行。

如果您经常这样做,也许您可​​以尝试创建一个函数来调用sequelizeBulkInsert脚本,假设它正常工作(未经测试):

// sequelizeBulkInsert.js
var fs = require('fs');
var async = require('async');
var csv = require('csv');


module.exports = function(Model){
  this.importFile = function(filename, doneLoadingCallback) {
    var input = fs.createReadStream(filename);
    var parser = csv.parse({
      columns: true,
      relax: true
    });

    var inserter = async.cargo(function(tasks, inserterCallback) {
        Model.bulkCreate(tasks).then(function() {
            inserterCallback();
          }
        );
      },
      1000
    );

    parser.on('readable', function () {
      while(line = parser.read()) {
        inserter.push(line);
      }
    });

    parser.on('end', function (count) {
      inserter.drain = function() {
        doneLoadingCallback();
      }
    });

    input.pipe(parser);
  }
}

然后,在另一个文件中

var Bulk = require('/path/to/sequelizeBulkInsert');
var bulk = new Bulk(Model);

bulk.importFile('path_to_data.csv', function(){
  //data is imported
})