代码拉取完成,页面将自动刷新
本工具是通过 sequlize 来将数据导入 mysql。当 csv 文件大小大于 100M 时,程序会使用,逐行读取方式来获取数据,以减少内存消耗。
npm i csv2mysqlra -S
const csv2mysqlra = require('csv2mysqlra');
csv2mysqlra({
seqConfig, // sequlize 配置
csvDirPath: "./csv", // csv 数据所在目录
modelDirPath: "./model", // sequlize model 定义未知
batchNum: 600, // 每次批量导入数据的条数 默认 600
workerNum: 6, // 启用的 worker 数量 默认 6 个
logDirPath: "./log", // 异常日志目录
startIndex: 0, // tbNames 起始位置 默认为0
endIndex: 5, // tbNames 终止位置 默认为要导入表的数量
tbNames: ["user"], // 表名 于 csv 文件名同名 如果不填,将默认csvDirPath下所有csv文件名为tbNames
tbMaps:{ user:['user1.csv','user2.csv']}, // 新增功能,model 目录和 csv文件的映射假如 user 表有两份文件要导入,可以使用此功能。但是使用了tbMaps 那么 tbNames 就会失效。
hasThRow: true, // csv 文件是否有表头行 默认为 true
csvExtension: ".csv",// csv 文件后缀 默认为 .csv
filter(tbName,row,ri){ // 数据过滤 需要导入的数据返回true 不需要的数据返回false
// tbName 当前数据所在表的表名
// row 当前读取行的字符串
// ri 当前行所在行号 不含表头行
return true|false;
},
headHandler(tbName, thRow) {
// tbName 表名
// thRow 表头所在行的字符串
return 处理好后的字符串数组
},
rowHandler(thead, tbName, row, ri) {
// thead 表头字符串数组
// tbName 当前数据所在表的表名
// row 当前读取行的字符串
// ri 当前行所在行号 不含表头行
return 处理好后的对象
},
});
const seqConfig = {
dialect: "mysql",
host: "127.0.0.1",
port: 3306,
database: "db",
username: "username",
password: "password",
};
module.exports = (sequelize, DataTypes) => {
const { STRING, DATE, NOW } = DataTypes;
const User = sequelize.define("users", {
id: {
field: "id",
type: STRING(30),
comment: "用户工号",
primaryKey: true,
unique: true,
},
name: {
field: "name",
type: STRING(255),
comment: "用户姓名",
},
createdAt: {
field: "created_at",
type: DATE,
comment: "创建时间",
defaultValue: NOW,
},
updatedAt: {
field: "updated_at",
type: DATE,
comment: "更新时间",
defaultValue: NOW,
},
});
return User;
};
要导入的数据文件名与 model 文件名称必须保持一致。 比如在 model 目录中,定义了 user.js 文件,那么它定义的表所对应的 csv 文件必须是 user.csv
经过测试发现 worker = 6,batchNum = 600。导入速度最快。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。