Sequelize 导入 CSV 数据的技巧和方法

在前端开发中,Sequelize 是一个常用的 ORM 框架,它提供了一种将数据库中的表映射为 JavaScript 对象的方式。在实际开发中,我们经常需要从 CSV 文件中导入数据到数据库中,本文将介绍如何使用 Sequelize 导入 CSV 数据。

1. 安装依赖

在使用 Sequelize 导入 CSV 数据之前,我们需要安装一些必要的依赖:

npm install csv-parser sequelize

其中,csv-parser 是一个用于解析 CSV 文件的 Node.js 模块,sequelize 则是 Sequelize 的核心模块。

2. 创建模型

在导入 CSV 数据之前,我们需要先创建对应的 Sequelize 模型。以导入 students.csv 文件为例,我们可以创建如下的模型:

const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  dialect: 'mysql'
});

const Student = sequelize.define('Student', {
  name: {
    type: DataTypes.STRING
  },
  gender: {
    type: DataTypes.STRING
  },
  age: {
    type: DataTypes.INTEGER
  }
}, {
  timestamps: false
});

sequelize.sync();

上面的代码中,我们创建了一个名为 Student 的模型,并定义了 namegenderage 三个属性。此外,我们还将 timestamps 设为 false,以避免在数据库中自动添加时间戳字段。

3. 导入 CSV 数据

有了模型之后,我们就可以开始导入 CSV 数据了。首先,我们需要读取 CSV 文件并解析其中的数据:

const fs = require('fs');
const csv = require('csv-parser');

const results = [];

fs.createReadStream('students.csv')
  .pipe(csv())
  .on('data', (data) => {
    results.push(data);
  })
  .on('end', () => {
    console.log(results);
  });

上面的代码中,我们使用 fs 模块的 createReadStream 方法读取 students.csv 文件,并使用 csv-parser 模块解析其中的数据。在解析过程中,我们将每一行数据存放在 results 数组中,并在解析完成后输出该数组。

接下来,我们需要将解析出来的数据插入到数据库中:

const fs = require('fs');
const csv = require('csv-parser');
const { Student } = require('./models');

fs.createReadStream('students.csv')
  .pipe(csv())
  .on('data', async (data) => {
    await Student.create({
      name: data.name,
      gender: data.gender,
      age: data.age
    });
  })
  .on('end', () => {
    console.log('Data imported successfully!');
  });

上面的代码中,我们使用 async/await 将插入操作变为异步操作,以避免出现并发插入的问题。在插入数据时,我们使用 create 方法创建一个新的 Student 实例,并将解析出来的数据分别赋值给 namegenderage 属性。在插入完成后,我们输出一条成功信息。

4. 总结

本文介绍了使用 Sequelize 导入 CSV 数据的方法,包括创建模型、读取 CSV 文件、解析数据和插入数据库。通过本文的学习,读者将能够掌握使用 Sequelize 导入 CSV 数据的技巧和方法,为实际开发中的数据导入操作提供指导意义。

示例代码:https://github.com/mrleidesen/sequelize-import-csv

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65bc7aa7add4f0e0ff51c3ea