Bon*_*our 5 mysql csv database-migration node.js sequelize-cli
我已经通过sequelize-cli 设置并运行了迁移策略,以便可以正确构建表。它可以使用sequelize db:migrate并且可以很好地创建表格。并sequelize db:migrate:undo会删除该表。
我还包含了插入几条记录的代码(根据此处的 SE 注释)。这也有效。这是所有这些的代码:
'use strict';
module.exports = {
up: function(queryInterface, DataTypes, done) {
return queryInterface.createTable('survey', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
state: {
type: DataTypes.TEXT
},
age: {
type: DataTypes.INTEGER
},
race: {
type: DataTypes.TEXT
},
gender: {
type: DataTypes.TEXT
},
education: {
type: DataTypes.TEXT
},
q1: {
type: DataTypes.INTEGER
},
q2: {
type: DataTypes.INTEGER
},
.
.
.
q24: {
type: DataTypes.INTEGER
},
q25: {
type: DataTypes.INTEGER
}
}).then(function() {
queryInterface.sequelize.query("INSERT INTO survey (state, age, race, gender, q1, q7, q24) VALUES ('Texas', 42, 'white', 'female', 5, 4, 3), ('Louisiana', 19, 'hispanic', 'male', 1, 2,5)");
done();
});
},
down: function(queryInterface, Sequelize) {
return queryInterface.dropTable('survey');
}
};Run Code Online (Sandbox Code Playgroud)
但我有一个包含 3000 多条记录的 CSV 文件,需要用作种子数据。它位于db文件夹中,名为survey.csv. 我还有一个seeders文件夹,我认为它是由sequelize init或自动创建的sequelize migration:create。目前是空的。
我可以使用 Excel 中的串联函数来创建有序的 n 元组数据,然后将这 3000 行插入并粘贴到 的 Promise 部分中up,但这似乎很荒谬。
我找到了类似问题的答复,但在 Rails 中:
您需要 CSV 库。来自文档:
arr_of_arrs = CSV.read("path/to/file.csv")这将为您提供一个二维数组,您可以根据需要对其进行处理。
CSV与 类似IO.read,但有一些额外功能,例如标头解析。
看起来有几个(或更多) csv节点包,但是天哪,它们太复杂了(就像简单命名的csv)。
是否有一种更简单的 csv 解析器(如 Rails 解析器)可以用来方便将 csv 转储到数据库中?或者另一种不需要从电子表格复制大量多余代码的方法?
小智 0
要使用 Sequelize.js 创建种子文件以从 CSV 文件中播种数据,您可以按照以下步骤操作:
安装必要的软件包:
npm install --save续集sequelize-cli mysql2 csv-parser
这将安装 Sequelize、Sequelize CLI、Sequelize 的 MySQL2 驱动程序和 CSV 解析器。
为您的表创建 Sequelize 模型。例如,如果您的 CSV 文件包含有关书籍的数据,您可以创建如下模型:
npx Sequelize-cli 模型:生成 --name Book --attributes 标题:字符串,作者:字符串,年份:整数
这将创建一个具有、和属性Book的模型。titleauthoryear
运行迁移以在数据库中创建表:
npx Sequelize-cli db:migrate
seeders使用 Sequelize CLI 在目录中创建种子文件
npx Sequelize-cli 种子:生成 --name 种子书
这将在目录中创建一个新的种子文件seeders。
编辑种子文件以读取 CSV 文件,解析其内容,然后使用 Sequelize 将它们插入到数据库中。这是一个例子:
const fs = require('fs'); const csv = require('csv-parser'); const Book = require('../models/book');
module.exports = {
up: (queryInterface, Sequelize) => {
const results = [];
return new Promise((resolve, reject) => {
fs.createReadStream('./data/books.csv')
.pipe(csv())
.on('data', (data) => {
results.push(data);
})
.on('end', () => {
Book.bulkCreate(results)
.then(() => {
resolve();
})
.catch((error) => {
console.error(error);
reject(error);
});
});
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.bulkDelete('Books', null, {});
},
};
Run Code Online (Sandbox Code Playgroud)
此代码从该位置读取 CSV 文件./data/books.csv,使用包解析其内容,并使用Sequelize 方法csv-parser将数据插入到表中。该函数用于将数据插入数据库,如果需要,该函数用于删除数据。BookbulkCreateupdown
运行种子将数据插入数据库:
npx Sequelize-cli db:seed --seed seers/seed-books.js
这将运行种子文件up的功能seed-books并将数据插入数据库。
通过查询数据库来测试数据,以确保 CSV 文件中的数据已正确插入。
注意:在此示例中,我假设 CSV 文件位于data项目根目录中。您需要根据自己的项目的需要调整文件路径。
| 归档时间: |
|
| 查看次数: |
2559 次 |
| 最近记录: |