当前位置: 首页 > news >正文

【Sequelize】迁移和种子

一、Sequelize CLI 基础配置

  1. 安装依赖

    npm install --save-dev sequelize-cli sequelize mysql2
    

    需同时安装 sequelize 和数据库驱动(如 mysql2

  2. 初始化项目结构

    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"
  }
}


二、迁移操作流程(以添加字段为例)

  1. 创建迁移文件

    npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
    

    在 models 文件夹中创建了一个 user 模型文件;
    在 migrations 文件夹中创建了一个名字像 XXXXXXXXXXXXXX-create-user.js 的迁移文件.

  2. 编写迁移逻辑

     '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 定义回滚操作(删除字段)

  3. 执行迁移

    npx sequelize-cli db:migrate
    

    系统会自动创建 SequelizeMeta 表记录迁移状态

  4. 撤销迁移
    • 撤销最近一次迁移:npx sequelize-cli db:migrate:undo
    • 撤销所有迁移:npx sequelize-cli db:migrate:undo:all


三、种子文件

  1. 数据初始化:填充基础数据(如管理员账户、系统配置)
  2. 测试数据生成:快速构建开发/测试环境数据集
  3. 关联数据维护:处理关联模型的级联数据插入

创建种子文件流程

  1. 生成模板文件

    npx sequelize-cli seed:generate --name demo-user
    

    生成文件路径:seeders/20250220000000-demo-user.js(时间戳前缀保证执行顺序)

  2. 编写插入逻辑(用户表示例)

     '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, {});
       }
     };
    
    

执行与控制命令

  1. 执行全部种子

    npx sequelize-cli db:seed:all
    

    运行顺序:按文件名时间戳顺序执行

    在这里插入图片描述

  2. 按需执行单个种子

    npx sequelize-cli db:seed --seed 20250220000000-demo-user
    
  3. 撤销操作

    # 撤销最新种子
    npx sequelize-cli db:seed:undo
    
    # 撤销指定种子
    npx sequelize-cli db:seed:undo --seed 20250220000000-demo-user.js
    
    # 撤销全部种子
    npx sequelize-cli db:seed:undo:all
    

相关文章:

  • QT聊天项目DAY01
  • 设计模式 --- 命令模式
  • C++进阶——C++11_{ }初始化_lambda_包装器
  • Flutter常用组件实践
  • python+requests接口自动化测试框架实例教程
  • C#容器源码分析 --- Queue<T>
  • 2025届蓝桥杯JavaB组个人题解(暂时不全,没题目)
  • 【AI】AI大模型发展史:从理论探索到技术爆发
  • [创业之路-366]:投资尽职调查 - 尽调核心逻辑与核心影响因素:价值、估值、退出、风险、策略
  • webpack vite
  • 基于 Termux 在移动端配置 Ubuntu 系统并搭建工作环境
  • DeepSeek在应急救援领域的应用解决方案
  • docker测试镜像源
  • 如何在运行时获取硬件信息
  • day24 学习笔记
  • Linux:35.其他IPC和IPC原理+信号量入门
  • 自动驾驶的数据集以及yolov8和yolop
  • Oracle 复制表结构(含索引、主键)操作指南
  • 池式结构---内存池
  • 企业年报问答RAG挑战赛冠军方案:从零到SotA,一战封神
  • 网站开发用什么网站/百度商家版下载
  • 豆瓣网网站建设/深圳外贸网站推广
  • 温州网站优化定制/百度一下的网址
  • 月编程做网站/自己做seo网站推广
  • 简单代码大全/seo在线优化工具
  • wordpress企业网站定制教程 一/北京网站建设优化