Sequelize 实践指南:如何对关系型数据库进行数据迁移?

Sequelize 是一款 Node.js 的 ORM 框架,可以操作多种关系型数据库,包括 PostgreSQL、MySQL、SQLite 和 Microsoft SQL Server 等。其中,数据迁移是大型项目必不可少的一部分,让我们来看看如何使用 Sequelize 进行数据库迁移。

数据库迁移的重要性

在大型项目中,数据库结构通常会经常进行修改。这些修改可能包括添加、删除、修改表格或其列,或者创建、删除索引等。手动管理这些变化是一项繁琐的任务,而且容易出错。而数据迁移技术可以大大简化这个过程,通过编写可重复执行的脚本来处理各种数据库结构变化。

如果没有数据迁移技术,那么在项目发生变化时,开发人员可能会花费大量时间调整数据库结构。尤其是在开发团队中有多个人员共同开发时,数据迁移能够保证数据库结构的一致性。

数据库迁移操作

一个数据库迁移操作通常包括以下步骤:

  • 创建一个新版本的数据库结构,如添加新的表格、列或索引。
  • 更新现有的数据库结构,如从现有表格中删除列,或者修改当前的索引定义。
  • 向现有数据中填充新的数据,如向添加的表格中插入新的数据行。

Sequelize 提供了与上述步骤相对应的一些功能,以便简化数据库迁移的过程,我们来逐步了解。

使用 Sequelize 进行数据库迁移

1. 安装必要的依赖

首先,我们需要在项目中安装必要的依赖。

--- ------- ------------- --------- ------ ------

sequelize-cli 包提供了使用 Sequelize 进行数据库迁移的必要命令。sequelize 是 Sequelize 框架的核心包。mysql2 则是 Sequelize 支持的 MySQL 数据库的驱动程序。

2. 配置 Sequelize

接下来,我们需要配置 Sequelize 的连接信息。请创建一个名为 .sequelizerc 的文件,并将以下内容添加到该文件中:

----- ---- - ----------------

-------------- - -
  --------- ---------------------- ---------------
  -------------- -----------------------
  --------------- ------------------------
  ------------------ --------------------------
--

如上所示,我们指定了我们的配置文件、模型文件、迁移文件和数据填充文件所在的位置。

接下来,我们创建一个 config.json 的配置文件,这个文件用来配置数据库连接信息和 Sequelize 的基本设置。我们在这里使用 MySQL 数据库。

-
    -------------- -
        ----------- -------
        ----------- ---
        ----------- --------
        ------- ------------
        ---------- --------
        ------------------- -----
    --
    ------- -
        ----------- -------
        ----------- ---
        ----------- -------------
        ------- ------------
        ---------- --------
        ---------- -----
    --
    ------------- -
        ----------- -------
        ----------- ---
        ----------- -------------------
        ------- ------------
        ---------- --------
        ------------------- -----
    -
-

3. 创建初始的数据库结构

接下来,我们需要创建 Sequelize 模型,其中包括定义数据库表的字段和属性。

请创建一个名为 User.js 的文件,并添加以下代码:

-------------- - ----------- ---------- -- -
    ----- ---- - ------------------------ -
        --- -
            ----- ------------------
            -------------- -----
            ----------- ----
        --
        ----- -
            ----- -----------------
            ---------- ------
        --
        ------ -
            ----- -----------------
            ---------- ------
            ------- -----
        --
        --------- -
            ----- -----------------
            ---------- ------
        --
        ---------- -
            ----- ---------------
            ------------- --------------
        --
        ---------- -
            ----- ---------------
            ------------- --------------
        -
    ---

    ------ -----
-

如上所述, User.js 定义了 User 模型,该模型将被转换为 Users 表。该表有一个自增长字段 id,我们还定义了用于用户名、电子邮件、密码、创建时间和更新时间的其他字段。

我们还需要为 User 模型创建一个迁移文件,来定义如何在数据库中创建 Users 表。请使用以下命令为 User 模型创建一个新的迁移文件:

--- --------- ---------------- ------------------

运行上述命令后会创建一个新的迁移文件,名为 XXXXXXXXXXXXXX-create-user.js。我们将它重命名为 20221031124700-create-user.js(其中的数字随意),并添如下内容:

---- --------

-------------- - -
  --- ---------------- ---------- -- -
    ----------------------------------- -
      --- -
        ----- ------------------
        -------------- -----
        ----------- ----
      --
      ----- -
        ----- -----------------
        ---------- ------
      --
      ------ -
        ----- -----------------
        ---------- ------
        ------- -----
      --
      --------- -
        ----- -----------------
        ---------- ------
      --
      ---------- -
        ----- ---------------
        ------------- --------------
      --
      ---------- -
        ----- ---------------
        ------------- --------------
      -
    --
  --

  ----- ---------------- ---------- -- -
    ----------------------------------
  -
--

上述迁移文件定义了如何创建和删除 Users 表。up 方法定义了创建表的逻辑,down 方法定义了删除表的逻辑。

我们使用 queryInterface 对象来执行数据库相关操作。在本例中,我们使用 createTable 方法来创建 Users 表,使用 dropTable 方法来删除 Users 表。

4. 安装数据填充

在代码安装完毕后,我们可以用数据填充技术来添加初试的数据。请使用以下命令为 User 模型创建一个新的数据填充文件:

--- --------- ------------- ------ ----------

运行上述命令后会创建一个新的数据填充文件,名为 XXXXXXXXXXXXXX-init-users.js。我们将其重命名为 20221031152226-init-users.js(日期随意),并添加以下内容:

---- --------

-------------- - -
  --- ---------------- ---------- -- -
    ------ ---------------------------------- --
      ----- -------
      ------ ----------------
      --------- ---------
      ---------- --- -------
      ---------- --- ------
    --
    -
      ----- ------
      ------ ---------------
      --------- ---------
      ---------- --- -------
      ---------- --- ------
    --- ----
  --

  ----- ---------------- ---------- -- -
    ------ ---------------------------------- ----- ----
  -
--

上述数据填充文件定义了 up 方法,用于向 Users 表中添加两个数据。我们使用 queryInterface.bulkInsert 方法来批量插入初始数据,使用 queryInterface.bulkDelete 方法来删除这个初始数据。

5. 运行数据库迁移

现在我们已经定义了一个数据库模型,接下来我们可以执行迁移任务,使用以下命令:

--- --------- ----------

运行上述命令后,Sequelize 将自动处理我们定义的的数据库迁移,并创建 Users 表和添加数据。

6. 数据库迁移进行到一半

如果你已经运行了一些数据库迁移,现在需要新增一个新的迁移并修改现有的表格。在这种情况下,最好使用一个新的迁移而不是修改现有的迁移。

请使用以下命令,为 User 模型创建一个新的数据库迁移文件:

--- --------- ---------------- ----------------------

运行上述命令后,将创建一个新的迁移,名为 XXXXXXXXXXXXXX-add-age-to-user.js。我们将其重命名为 20221031171015-add-age-to-user.js(日期随意),并添加以下内容:

---- --------

-------------- - -
  --- ---------------- ---------- -- -
    ------ --------------------------------- ------ -------------------
  --

  ----- ---------------- ---------- -- -
    ------ ------------------------------------ -------
  -
--

up 方法使用 queryInterface.addColumn 方法将一个新的字段 age 添加到 Users 表中,down 方法使用 queryInterface.removeColumn 方法从 Users 表中删除 age 字段。

7. 回退数据库迁移

如果迁移过程出现问题需要回退,在 Sequelize 中执行回退十分简单。请使用以下命令:

--- --------- ---------------

运行上述命令会回退最新的数据库迁移。

结论

Sequelize 提供了强大的数据库迁移工具,能够在进行数据库结构变更时方便地管理和追踪变更历史。在大型项目中使用 Sequelize 进行数据迁移,能够避免出现错误,并保持数据库结构的一致性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670f926d5f55128102657f3b