引言
Sequelize 是一个基于 Node.js 的 ORM(对象关系映射),它提供了一些方便的方法来处理数据库的操作。其中一个主要功能是数据库迁移(migration)。本文将介绍如何使用 Sequelize 进行数据迁移。
数据迁移
什么是数据库迁移呢?在Web开发中,当应用中的数据模型发生变更时,需要对数据库中的数据模型做出相应的改变。这就是数据库迁移,它是保持数据持续性的重要方式,因为数据模型的变更可能会导致数据的丢失或结构混乱。Sequelize 提供了一个方便的工具来向下兼容地改变数据模型,让数据库迁移变得轻松。
安装
使用 Sequelize 进行数据迁移需要先安装 Sequelize ,使用以下命令即可:
npm install --save sequelize
同时,在使用 Sequelize 进行数据库迁移前,需要安装 SQLite、MySQL、PostgreSQL 中的一个数据库,作为 Sequelize 的操作对象。
数据库存储格式
在使用 Sequelize 进行数据库迁移前,我们需要定义如何存储我们的数据。Sequelize 支持多种数据库存储格式,包括 MySQL、MariaDB、SQLite、PostgreSQL 和 MSSQL。
以 MySQL 数据库为例,需要在连接到数据库之前,告诉 Sequelize 数据库连接的相关信息,例如:
const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql', operatorsAliases: 0, });
数据迁移的基本操作
在进行数据迁移前,需要了解 Sequelize 迁移命令的基本操作:
- 创建 migration
sequelize migration:create --name add-email-to-user
运行上述命令后,Sequelize 将会在当前目录下创建一个文件夹,文件夹名为 migration,同时在该文件夹下创建一个名为 add-email-to-user 的文件。
- 编辑 migration 文件
此时打开刚刚创建的 add-email-to-user 文件,编辑它,让它包含数据模型的改变,例如:
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ----- --------------------------------- -------- - ----- ----------------- --- -- ----- ----- ---------------- ---------- -- - ----- ------------------------------------ --------- -- --
上述代码表示添加一个 email 字段到 Users 表中。
up 方法表示改变要执行的迁移代码,down 方法表示如何撤销这个变化。
- 执行 migration
在编辑 migration 文件后可以直接运行以下命令:
sequelize db:migrate
这个命令会执行所有未执行过的迁移脚本操作。
数据库迁移的高级使用
多种方式编写 migration 脚本
通过使用 Sequelize CLI,可以有两种方式编写 migration 脚本:使用 JavaScript,或使用 JSON/YAML。
对于大部分开发人员而言,使用 JavaScript 会更加方便。
当使用 Sequelize CLI 时,只需要在运行脚本的时候指定配置文件即可,例如:
sequelize db:migrate --migrations-path ./extra-migration-folder
向下兼容
当你的应用升级到一个新版本,发现旧数据库结构不能匹配新的表结构时,Sequelize 可以非常方便地向下兼容旧版本的数据库。只需要使用 Sequelize 的 down() 方法(如果定义过的话)来反转映射。
Seeds
Seeds 是在数据库中插入一些数据的工具。Sequelize 支持 Seeds 以轻松地创建数据集。
sequelize seed:create --name demo-user
运行上述命令,Sequelize 将会在当前目录下创建一个名为 demo-user.js 的文件。然后编辑该文件,向数据库中插入要测试的数据。
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ------ ---------------------------------- - - ----- ----- ----- ------ ---------------------- ---------- --- ------- ---------- --- ------- -- --- -- ----- ----- ---------------- ---------- -- - ------ ---------------------------------- ----- ---- -- --
运行 Seeds 的操作很简单:
sequelize db:seed:all
结论
Sequelize 提供了一种非常方便的方法,来管理数据模型的迁移。对于任何使用 Node.js 的 Web 开发人员来说,Sequelize 都是值得考虑的一个工具。如果你正在尝试将应用转移到一个新的数据库服务器上,或者正在开发一个应用,并需要改变数据库模型,使用 Sequelize 进行数据库迁移是一个不错的选择。
示例代码
添加 email 字段的 migration 文件示例代码:
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ----- --------------------------------- -------- - ----- ----------------- --- -- ----- ----- ---------------- ---------- -- - ----- ------------------------------------ --------- -- --
向数据库中插入数据的 Seed 示例代码:
-- -------------------- ---- ------- ---- -------- -------------- - - --- ----- ---------------- ---------- -- - ------ ---------------------------------- - - ----- ----- ----- ------ ---------------------- ---------- --- ------- ---------- --- ------- -- --- -- ----- ----- ---------------- ---------- -- - ------ ---------------------------------- ----- ---- -- --
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6707a967d91dce0dc86b1da4