node.js - node.js + sequelize 批量插入
问题描述
我是 node.js 和续集的新手。我已经构建了一个带有 sequelize 的 mysql 数据库,它符合我对实际项目的需求。
然后我搜索了用 sequelize 填充数据库的可能性,将它与 csv 文件结合起来的方法对我来说似乎是最好的解决方案。
我有三个单独的表的三个 csv 文件,并在 github https://gist.github.com/evansiroky/167f218bb5342bff80c6#file-sequelizebulkinsert-js上找到了 Evan 的脚本
任何人都可以帮我解决我需要如何实施它来完成这项工作吗?我知道这一定是一个非常基本的问题,但我不知道如何。
解决方案
如果您只想用数据填充数据库,您仍然可以使用 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
})
推荐阅读
- javascript - 我想要警报“余额很大!” 直接地
- c# - 在 LINQ 的 JOIN 中使用 AND
- getstream-io - 如何使用 react-activity-feed 客户端删除帖子?
- nginx - Nginx 多实例
- .net - .net mvc 包 id 部分视图的问题
- javascript - 如何使用 ajax 发布到 php,我一直收到错误 400 错误请求?
- dialogflow-es - 对话流、谷歌操作和网络演示
- unity3d - Unity - MRTK - HoloLens:修改 2D 按钮的碰撞器,使光标更靠近
- visual-studio-code - 用空格键停止自动完成
- sql - 获取每组只有 1 条记录的记录