我已经通过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');
}
};
但是我有一个CSV文件,其中有超过3000条记录,需要用作种子数据。它位于db
文件夹中,名为survey.csv
。我还有一个seeders
文件夹,我认为它是由sequelize init
或sequelize migration:create
自动创建的。目前是空的。
我可以使用Excel中的concatenate函数来创建有序的n元组数据,然后将这3000行粘贴到up
的promise部分,但这似乎很荒谬。
我找到了一个类似问题的回复,但在Rails中:
你需要CSV库。the docs:arr_of_arrs = CSV.read("path/to/file.csv")
这将为您提供一个2D数组,您可以根据自己的喜好进行处理。CSV
类似于IO.read
,但有一些额外的功能,如头解析。
看起来有几个(或更多)csv***node***包,但是天哪,它们太复杂了(比如简单命名的csv)。
有没有一个更简单的csv解析器(比如Rails的那个),我可以用它来帮助将csv转储到数据库中?或者是另一种不需要从电子表格中复制大量多余代码的方法?
1条答案
按热度按时间i2byvkas1#
要使用Sequelize.js创建种子文件以从CSV文件中种子数据,您可以按照以下步骤操作:
1.安装必要的软件包:
npm install --保存sequelize sequelize-cli mysql2 csv-parser
这将安装Sequelize、Sequelize CLI、用于Sequelize的MySQL 2驱动程序和CSV解析器。
1.为表创建Sequelize模型。例如,如果您的CSV文件包含有关书籍的数据,则可以创建如下模型:
npx sequelize-cli model:generate --name Book --attributes title:string,author:string,year:integer
这将创建一个具有
title
、author
和year
属性的Book
模型。1.运行迁移以在数据库中创建表:
npx sequelize-cli db:migrate
1.使用Sequelize CLI在
seeders
目录中创建种子文件npx sequelize-cli seed:generate --name seed-books
这将在
seeders
目录中创建一个新的种子文件。1.编辑种子文件以读取CSV文件,解析其内容,并使用Sequelize将它们插入数据库。下面是一个例子:
常量fs =需要(“fs”); const csv = require('csv-parser'); const Book = require('../models/book');
这段代码从
./data/books.csv
位置读取CSV文件,使用csv-parser
包解析其内容,并使用Sequelize的bulkCreate
方法将数据插入Book
表。up
函数用于将数据插入数据库,down
函数用于在需要时删除数据。1.运行seed将数据插入数据库:
npx sequelize-cli db:seed --seed seeders/seed-books.js
这将运行
seed-books
种子文件的up
函数,并将数据插入数据库。1.通过查询数据库来测试数据,以确保正确插入了CSV文件中的数据。
注意:在本例中,我假设CSV文件位于项目根目录下的
data
目录中。您需要根据自己项目的需要调整文件路径。