node.js + sequelize массовая вставка - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в node.js и продолжаю.Я уже создал базу данных mysql с sequelize, которая соответствует моим потребностям в реальном проекте.

Затем я искал возможности заполнить базу данных с помощью sequelize, и подход к объединению его с файлами csv кажется лучшимрешение для меня.

У меня есть три CSV-файла для трех отдельных таблиц, и я нашел скрипт Эвана на GitHub https://gist.github.com/evansiroky/167f218bb5342bff80c6#file-sequelizebulkinsert-js

Может кто-нибудь помочь мне, как мне нужно реализовать его, чтобы сделать работу?Я знаю, что это, должно быть, очень простой вопрос, но я не знаю как.

1 Ответ

0 голосов
/ 05 июня 2018

Если вы просто хотите заполнить вашу БД данными, вы все равно можете сделать это старомодным способом, используя 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
})
...