这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战
前言
平时我们直接使用mysql的指令去建库,然后编写代码增删改查数据库。但这种方式不利于团队开发。
在项目中,数据表的结构会不断地演进,在不同的环境中(开发环境、测试环境、生产环境中),我们都需要同一套数据结构,如果快速的变更各个环境的数据表?Migrations 解决了这个问题,它帮我们管理数据结构的变更。而seeders则是创建表后自动创建一些测试数据的初始化设置设置
sequelize
Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。
Sequelize 遵从 语义版本控制。 支持 Node v10 及更高版本以便使用 ES6 功能。
利用sequelize插件 进行一系列设置 创建一个空项目,分别安装
- sequelize ORM 框架
- mysql2 mysql2模块
- sequelize-cli 脚手架
npm install --save sequelize mysql2
npm install -g sequelize-cli
Migrations
原理
我们的每一次数据表更新,都需要新建一个Migrations文件
Migrations文件包含了以下信息
- 操作时间,这个在文件名上
- 数据库的相关操作,这些在
Migrations文件的up、down函数中
有了这些信息,只要把所有Migrations文件中up函数数据库操作执行,即可以将数据表更新到最新状态
注意:所有的数据表修改操作,必须使用Migrations文件,不能直接使用sql直接更新,否则无法利用Migrations正确迭代和回退数据库版本
初始化
根目录下你需要执行 init 命令
sequelize init
这将创建以下文件夹
config, 包含配置文件,它告诉CLI如何连接数据库models,包含您的项目的所有模型migrations, 包含所有迁移文件seeders, 包含所有种子文件
config
{
"development": {
"username": "root",
"password": "123456",
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": "123456",
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": "123456",
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
注意: 如果你的数据库还不存在,你可以调用 db:create 命令。 通过正确的访问,它将为您创建该数据库。
创建migrations 文件
执行命令
sequelize migration:generate --name=users
执行后,会生成一个 Migrations文件 (<时间>-init-<操作名称>.js),代表新的一次迭代
up
执行 sequelize db:migrate 升级版本
升级版本的时候会调用up函数,需要在函数中对数据表进行更新迭代(创建、修改、删除)
**
up: (queryInterface, Sequelize) => {
const { INTEGER, DATE, STRING } = Sequelize;
await queryInterface.createTable('users', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true },
name: STRING(30),
age: INTEGER,
created_at: DATE,
updated_at: DATE,
});
}
down
执行 sequelize db:migrate:undo 回退一个变更
回退版本的时候会调用down函数,需要在函数中对数据表进行更新的逆操作,例如在up创建表,down则是删除表
**
down: (queryInterface, Sequelize) => {
await queryInterface.dropTable('users');
}
可以通过 db:migrate:undo:all 回退到初始状态
seeders
有的时候,我们需要为数据库写入一些测试数据,那么这个时候,我们就可以通过种子脚本来完成这个需求。
这个命令将会在 seeders 文件夹中创建一个种子文件。文件名看起来像是 XXXXXXXXXXXXXX-demo-user.js,它遵循相同的 up/down 语义,如迁移文件。
现在我们应该编辑这个文件,将演示用户插入users表。
up
up: async (queryInterface, Sequelize) => {
await queryInterface.bulkInsert('users', [{
id: 1,
name: 'iwhao',
age: 18,
created_at: new Date(),
updated_at: new Date(),
}], {});
},
执行 sequelize db:seed:all ,数据会写入数据库
down
down: async (queryInterface, Sequelize) => {
await queryInterface.bulkDelete('users');
}
执行 sequelize db:seed:undo ,会撤销最新一个seed
如果你想撤销所有seed
sequelize db:seed:undo:all
以上就是本篇的全部内容了,非常感谢帅哥美女们能看到这里,如果这个文章写得还不错或者对你有一点点帮助,求点赞,求关注,求分享,当然有任何问题可以在评论讨论,我都会积极回答的,再次感谢😁