在前端开发中,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
文件为例,我们可以创建如下的模型:
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- --------- - --- --------------------- ----------- ----------- - -------- ------- --- ----- ------- - --------------------------- - ----- - ----- ---------------- -- ------- - ----- ---------------- -- ---- - ----- ----------------- - -- - ----------- ----- --- -----------------
上面的代码中,我们创建了一个名为 Student
的模型,并定义了 name
、gender
和 age
三个属性。此外,我们还将 timestamps
设为 false
,以避免在数据库中自动添加时间戳字段。
3. 导入 CSV 数据
有了模型之后,我们就可以开始导入 CSV 数据了。首先,我们需要读取 CSV 文件并解析其中的数据:
-- -------------------- ---- ------- ----- -- - -------------- ----- --- - ---------------------- ----- ------- - --- ----------------------------------- ------------ ----------- ------ -- - ------------------- -- ---------- -- -- - --------------------- ---
上面的代码中,我们使用 fs
模块的 createReadStream
方法读取 students.csv
文件,并使用 csv-parser
模块解析其中的数据。在解析过程中,我们将每一行数据存放在 results
数组中,并在解析完成后输出该数组。
接下来,我们需要将解析出来的数据插入到数据库中:
-- -------------------- ---- ------- ----- -- - -------------- ----- --- - ---------------------- ----- - ------- - - -------------------- ----------------------------------- ------------ ----------- ----- ------ -- - ----- ---------------- ----- ---------- ------- ------------ ---- -------- --- -- ---------- -- -- - ----------------- -------- ---------------- ---
上面的代码中,我们使用 async/await
将插入操作变为异步操作,以避免出现并发插入的问题。在插入数据时,我们使用 create
方法创建一个新的 Student
实例,并将解析出来的数据分别赋值给 name
、gender
和 age
属性。在插入完成后,我们输出一条成功信息。
4. 总结
本文介绍了使用 Sequelize 导入 CSV 数据的方法,包括创建模型、读取 CSV 文件、解析数据和插入数据库。通过本文的学习,读者将能够掌握使用 Sequelize 导入 CSV 数据的技巧和方法,为实际开发中的数据导入操作提供指导意义。
示例代码:https://github.com/mrleidesen/sequelize-import-csv
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65bc7aa7add4f0e0ff51c3ea