迁移
就像你使用版本控制 如 Git 来管理源代码的更改一样,你可以使用迁移来跟踪数据库的更改. 通过迁移,你可以将现有的数据库转移到另一个状态,反之亦然:这些状态转换将保存在迁移文件中,它们描述了如何进入新状态以及如何还原更改以恢复旧状态.
你将需要 Sequelize CLI. CLI支持迁移和项目引导.
Sequelize 中的 Migration 是一个 javascript 文件,它导出两个函数 up
和 down
,这些函数指示如何执行迁移和撤消它. 你可以手动定义这些功能,但不必手动调用它们; 它们将由 CLI 自动调用. 在这些函数中,你应该借助 sequelize.query
以及 Sequelize 提供给你的其他任何方法,简单地执行所需的任何查询. 除此之外,没有其他神奇的事情.
安装 CLI
要安装 Sequelize CLI,请执行以下操作:
npm install --save-dev sequelize-cli
有关详细信息,请参见 CLI GitHub 库.
项目启动
要创建一个空项目,你需要执行 init
命令
npx sequelize-cli init
这将创建以下文件夹
config
, 包含配置文件,它告诉CLI如何连接数据库models
,包含你的项目的所有模型migrations
, 包含所有迁移文件seeders
, 包含所有种子文件
结构
在继续进行之前,我们需要告诉 CLI 如何连接到数据库. 为此,可以打开默认配置文件 config/config.json
. 看起来像这样:
{
"development": {
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
请注意,默 认情况下,Sequelize CLI 假定使用 mysql. 如果你使用其他方言,则需要更改 "dialect"
参数的内容.
现在编辑此文件并设置正确的数据库凭据和方言.对象的键(例如 "development")用于 model/index.js
以匹配 process.env.NODE_ENV
(当未定义时,默认值是 "development").
Sequelize 将为每个方言使用默认的连接端口(例如,对于postgres,它是端口5432). 如果需要指定其他端口,请使用 port
字段(默认情况下它不在 config/config.js 中,但你可以简单地添加它).
注意: 如果你的数据库还不存在,你可以调用 db:create
命令. 通过正确的访问,它将为你创建该数据库.
创建第一个模型(和迁移)
一旦你正确配置了CLI配置文件,你就可以首先创建迁移. 它像执行一个简单的命令一样简单.
我们将使用 model:generate
命令. 此命令需要两个选项
name
: 模型的名称attributes
: 模型的属性列表
让我们创建一个名叫 User
的模型
npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
这将发生以下事情
- 在
models
文件夹中创建了一个user
模型文件; - 在
migrations
文件夹中创建了一个名字像XXXXXXXXXXXXXX-create-user.js
的迁移文件.
注意: _Sequelize 将只使用模型文件,它是表描述.另一边,迁移文件是该模型的更改,或更具体的是说 CLI 所使用的表. 处理迁移,如提交或日志,以进行数据库的某些更改. _
运行迁移
直到这一步,CLI没有将任何东西插入数据库. 我们刚刚为我们的第一个模型 User
创建了必需的模型和迁移文件. 现在要在数据库中实际创建该表,需要运行 db:migrate
命令.
npx sequelize-cli db:migrate
此命令将执行这些步骤
- 将在数据库中确保一个名为
SequelizeMeta
的表. 此表用于记录在当前数据库上运行的迁移 - 开始寻找尚未运行的任何迁移文件. 这可以通过检查
SequelizeMeta
表. 在这个例子中,它将运行我们在最后一步中创建的XXXXXXXXXXXXXX-create-user.js
迁移,. - 创建一个名为
Users
的表,其中包含其迁移文件中指定的所有列.
撤消迁移
现在我们的表已创建并保存在数据库中. 通过迁移,只需运行命令即可恢复为旧状态.
你可以使用 db:migrate:undo
,这个命令将会恢复最近的迁移.
npx sequelize-cli db:migrate:undo
通过使用 db:migrate:undo:all
命令撤消所有迁移,可以恢复到初始状态. 你还可以通过将其名称传递到 --to
选项中来恢复到特定的迁移.
npx sequelize-cli db:migrate:undo:all --to XXXXXXXXXXXXXX-create-posts.js