网页游戏网站排行长尾词优化外包
一、Sequelize CLI 基础配置
-
安装依赖
npm install --save-dev sequelize-cli sequelize mysql2
需同时安装
sequelize
和数据库驱动(如mysql2
) -
初始化项目结构
npx sequelize-cli init
生成目录:
•config/config.json
:数据库连接配置(开发/测试/生产环境)
•migrations
:存放迁移脚本
•seeders
:存放种子数据脚本
•models
:存放数据模型
根据自己的情况做修改(比如中国时区需要+8)
{"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"}
}
二、迁移操作流程(以添加字段为例)
-
创建迁移文件
npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
在 models 文件夹中创建了一个 user 模型文件;
在 migrations 文件夹中创建了一个名字像 XXXXXXXXXXXXXX-create-user.js 的迁移文件. -
编写迁移逻辑
'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
定义回滚操作(删除字段) -
执行迁移
npx sequelize-cli db:migrate
系统会自动创建
SequelizeMeta
表记录迁移状态 -
撤销迁移
• 撤销最近一次迁移:npx sequelize-cli db:migrate:undo
• 撤销所有迁移:npx sequelize-cli db:migrate:undo:all
三、种子文件
- 数据初始化:填充基础数据(如管理员账户、系统配置)
- 测试数据生成:快速构建开发/测试环境数据集
- 关联数据维护:处理关联模型的级联数据插入
创建种子文件流程
-
生成模板文件
npx sequelize-cli seed:generate --name demo-user
生成文件路径:
seeders/20250220000000-demo-user.js
(时间戳前缀保证执行顺序) -
编写插入逻辑(用户表示例)
'use strict';/** @type {import('sequelize-cli').Migration} */module.exports = {up: (queryInterface, Sequelize) => {return queryInterface.bulkInsert('Users', [{firstName: 'John',lastName: 'Doe',email: 'example@example.com',createdAt: new Date(),updatedAt: new Date()}]);},down: (queryInterface, Sequelize) => {return queryInterface.bulkDelete('Users', null, {});}};
执行与控制命令
-
执行全部种子
npx sequelize-cli db:seed:all
运行顺序:按文件名时间戳顺序执行
-
按需执行单个种子
npx sequelize-cli db:seed --seed 20250220000000-demo-user
-
撤销操作
# 撤销最新种子 npx sequelize-cli db:seed:undo# 撤销指定种子 npx sequelize-cli db:seed:undo --seed 20250220000000-demo-user.js# 撤销全部种子 npx sequelize-cli db:seed:undo:all