一、Sequelize CLI 基础配置
-
安装依赖
bashnpm install --save-dev sequelize-cli sequelize mysql2
需同时安装
sequelize
和数据库驱动(如mysql2
) -
初始化项目结构
bashnpx sequelize-cli init
生成目录:
•
config/config.json
:数据库连接配置(开发/测试/生产环境)•
migrations
:存放迁移脚本•
seeders
:存放种子数据脚本•
models
:存放数据模型
根据自己的情况做修改(比如中国时区需要+8)
js
{
"development": {
"username": "root",
"password": "xxxxx",
"database": "clwy_api_development",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00"
}
}
二、迁移操作流程(以添加字段为例)
-
创建迁移文件
bashnpx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
在 models 文件夹中创建了一个 user 模型文件;
在 migrations 文件夹中创建了一个名字像 XXXXXXXXXXXXXX-create-user.js 的迁移文件.
-
编写迁移逻辑
javascript'use strict'; /** @type {import('sequelize-cli').Migration} */ module.exports = { // 执行迁移 创建表 async up(queryInterface, Sequelize) { await queryInterface.createTable('Users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, firstName: { type: Sequelize.STRING }, lastName: { type: Sequelize.STRING }, email: { type: Sequelize.STRING }, createdAt: { allowNull: false, type: Sequelize.DATE }, updatedAt: { allowNull: false, type: Sequelize.DATE } }); }, // 回滚迁移 删除表 async down(queryInterface, Sequelize) { await queryInterface.dropTable('Users'); } };
说明 :
•
up
使用事务添加字段,确保操作原子性•
down
定义回滚操作(删除字段) -
执行迁移
bashnpx sequelize-cli db:migrate
系统会自动创建
SequelizeMeta
表记录迁移状态 -
撤销迁移
• 撤销最近一次迁移:
npx sequelize-cli db:migrate:undo
• 撤销所有迁移:
npx sequelize-cli db:migrate:undo:all
三、种子文件
- 数据初始化:填充基础数据(如管理员账户、系统配置)
- 测试数据生成:快速构建开发/测试环境数据集
- 关联数据维护:处理关联模型的级联数据插入
创建种子文件流程
-
生成模板文件
bashnpx sequelize-cli seed:generate --name demo-user
生成文件路径:
seeders/20250220000000-demo-user.js
(时间戳前缀保证执行顺序) -
编写插入逻辑(用户表示例)
javascript'use strict'; /** @type {import('sequelize-cli').Migration} */ module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.bulkInsert('Users', [{ firstName: 'John', lastName: 'Doe', email: '[email protected]', createdAt: new Date(), updatedAt: new Date() }]); }, down: (queryInterface, Sequelize) => { return queryInterface.bulkDelete('Users', null, {}); } };
执行与控制命令
-
执行全部种子
bashnpx sequelize-cli db:seed:all
运行顺序:按文件名时间戳顺序执行
-
按需执行单个种子
bashnpx sequelize-cli db:seed --seed 20250220000000-demo-user
-
撤销操作
bash# 撤销最新种子 npx sequelize-cli db:seed:undo # 撤销指定种子 npx sequelize-cli db:seed:undo --seed 20250220000000-demo-user.js # 撤销全部种子 npx sequelize-cli db:seed:undo:all