使用Sequelize ORM

AI摘要

正在生成中……


安装sequelize

本地全局安装

1
npm i -g sequelize-cli
1
npm i sequelize mysql2

项目目录初始化

1
sequelize init
  • 其中config.json填写mysql配置信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    {
    "development": {
    "username": "root",
    "password": "xxxxxxx",
    "database": "clwy_api_development",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "timezone":"+08:00"
    },
    "test": {
    "username": "root",
    "password": null,
    "database": "clwy_api_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
    },
    "production": {
    "username": "root",
    "password": null,
    "database": "clwy_api_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
    }
    }

创建模型文件

会在models文件夹中生成article.js文件

1
sequelize model:generate --name Article --attributes title:string,content:text

执行数据库迁移

确保数据库的结构与当前的模型同步

1
sequelize db:migrate
  • 迁移前可以对数据进行微调, 在migrations文件夹里, 例如: title字段设置不允许为空

    1
    2
    3
    4
    title: {
    type: Sequelize.STRING,
    allowNull:false
    }

生成数据库种子文件

这个命令用于生成数据库种子文件。种子文件用于填充数据库中的初始数据。

1
sequelize seed:generate --name article
  • seed:generate: 生成一个新的种子文件(seed file),这个文件定义了你如何往数据库中插入数据。
  • --name article: 你为这个种子文件命名为 article,这意味着生成的种子文件是与 article 相关的,例如为 article 表添加数据。

执行数据库种子操作

需要先修改seeders文件夹的种子文件, 其中20250222073817-article填你自己的

1
sequelize db:seed --seed 20250222073817-article

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
'use strict';

/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
const articles = []
const counts = 100
for(let i=1;i<=counts;i++){
const article = {
title:`文章的标题 ${i}`,
content:`文章的内容 ${i}`,
createdAt:new Date(),
updatedAt:new Date(),
}

articles.push(article)
}

await queryInterface.bulkInsert('Articles',articles,{})
},

async down (queryInterface, Sequelize) {

await queryInterface.bulkDelete('Articles', null, {});
}
};