了解Sequelize,先了解以下概念:
什么是ORM
全称
Object Relational Mapping - 对象关系映射
,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不无需再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了
Sequelize
是一个基于 Node.js
的 ORM
库
Sequelize-cli
是其中一个独立的工具,提供了一些快速操作数据库的功能。比如:创建数据库、创建表等…。 (类似于 vue
和 vue-cli
的关系)
因为使用Mysql,所以安装的驱动是mysql2
;sequelize init
是初始化
npm i -g sequelize-cli
npm i sequelize mysql2
sequelize init
初始化sequelize项目,该命令将创建如下目录:
- config:包含配置文件,它告诉CLI如何连接数据库
- models:包含您的项目的所有模型
- migrations:包含所有迁移文件 (数据表结构)
- seeders:包含所有种子文件 (具体数据)
"development": {
"username": "root",
"password": "clwy1234",
"database": "clwy_api_development",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+08:00",
"port": 3307
},
npm sequelize db:create
他会根据你config.json 中添加的数据名称创建
执行删除
npm sequelize db:drop list
模型用于操作数据库表,执行下方命令生成模型:
sequelize model:generate --name Article --attributes title:string,content:text
model:generate / model:create
创建一个模型文件
– name:模型名称,必须
– attributes:字段列表,必须
在 models 文件夹中创建了一个 Article模型文件(供程序使用)
- 在 migrations 文件夹中创建了一个名字像 xxxxxxxx-create-Article.js 的迁移文件(供迁移使用)
文件虽然建完了,但是数据库里却啥也没有。
需要执行以下命令才能写入数据库,就是我们核心要做的执行迁移
所谓迁移,就是对数据库进行创建、修改
sequelize db:migrate
之后就可在Navicat上看到创建的模型生成的Articles表了(另一个SequelizeMeta表是记录已经迁移的文件,下次迁移时就不会重复执行)
撤销迁移
db:migrate:undo - 撤销上一次的迁移操作
db:migrate:undo:all - 撤销所有的迁移操作
db:migrate:undo --name 具体迁移脚本
npm sequelize db:migrate:undo
迁移文件是用来构建数据库以及表结构的,种子文件是用来填充数据的
seed:generate --name demo-user (自定义的名字)
种子文件脚本与迁移脚本类似,由up与down函数组成,传入的参数也是一致的
生成种子文件 name 后边接的是自定义的名字
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, {});
}
sequelize db:seed --seed xxx-article #单个种子
npx sequelize db:seed:all #所有种子
(xxx-article这个是自己具体种子名)我的命令如下:
sequelize db:seed --seed 20240823095240-article
db:seed:undo --seed 指定种子文件 撤销指定种子文件
db:seed:undo:all 撤销所有种子文件
npm sequelize db:seed:undo:all
以上是使用sequelize创建数据库,创建表的方法
步骤 | 命令 | 说明 |
---|---|---|
第一步 | sequelize model:generate --name Article --attributes … | 建模型和迁移文件 |
第二步 | 人工处理 | 根据需求调整迁移文件 |
第三步 | sequelize db:migrate | 运行迁移,生成数据表 |
第四步 | sequelize seed:generate --name article | 新建种子文件 |
第五步 | 人工处理 | 将种子文件修改为自己想填充的数据 |
第六步 | sequelize db:seed --seed xxx-article | 运行种子文件,将数据填充到数据表中 |
之后将使用 Sequelize 提供的模型(Model)来操作数据库,并编写接口。
以下是 Sequelize 中常用的方法,它们在构建接口时非常有用:
findByPk
id
)查找单个记录。Article.findByPk(req.params.id);
findAll
Article.findAll({ where: { published: true } });
create
Article.create({ title: 'New Article', content: 'Content...' });
update
article.update({ title: 'Updated Title' });
(这里的 article
是一个已经查询到的模型实例)destroy
article.destroy();
(这里的 article
是一个已经查询到的模型实例)findOne
Article.findOne({ where: { title: 'Some Title' } });
findAndCountAll
const { count, rows } = await Article.findAndCountAll({
where: { published: true },
limit: 10,
offset: 20
});
bulkCreate
Article.bulkCreate([{ title: 'Title 1', content: 'Content 1' }, { title: 'Title 2', content: 'Content 2' }]);
bulkUpdate
await Article.update(
{ published: false },
{ where: { authorId: 1 } }
);
bulkDelete
await Article.destroy({
where: {
published: false
}
});
count
Article.count({ where: { published: true } });
max
, min
, sum
, avg
Article.max('price', { where: { category: 'books' } });
belongsTo
, hasOne
, hasMany
, belongsToMany
Article.belongsTo(Author);
Author.hasMany(Article);
这些方法涵盖了从基本的 CRUD 操作到复杂的查询和关联操作。
在实际应用中,这些方法经常与 where
、limit
、offset
、order
等选项结合使用,以执行更精确的数据操作。
记得在使用这些方法时,如果它们是异步的,通常需要配合 await
关键字在 async
函数中使用。