如何使用 Express.js 和 Sequelize 实现数据库迁移

在应用程序开发过程中,我们经常需要对数据库进行升级和迁移。这在开发初期可能不是问题,但是在应用程序逐渐壮大、功能越来越复杂时,很容易就会面临数据结构变动的情况。为了解决这个问题,我们可以使用 Sequelize 和 Express.js,这样我们就可以轻松地实现数据库迁移,而无需担心数据丢失或者结构损坏。

什么是 Sequelize?

Sequelize 是一个 Node.js ORM(Object-Relational-Mapper)库,它支持 MySQL,PostgreSQL,SQLite 和文档数据库 MongoDB。ORM 是将数据存储在数据库中的关系模型(通常是表)与具有面向对象特征的程序代码之间的转换过程。ORM 采用了一种对象关系映射技术,将数据模型映射到对象模型。

以 Sequelize 为例,由于 Sequelize 是一种 ORM,我们在应用程序中使用它时,我们不必再为数据库管理器和 CRUD 操作编写原始 SQL 查询和代码。在 sequelize 中,我们将使用 JavaScript 对象来代表数据库表和记录。这些对象被称为模型,并且通过 Sequelize 表示为 sequelize.Model 类的实例对象。

什么是数据库迁移?

数据库迁移是指将数据库从一个版本迁移到另一个版本的过程。通常,迁移会发生在你的软件升级或者新版本发布的时候。在这些情况下,你需要向数据库中添加或删除一些表或字段,或者改变表或字段的结构。这些都被称为数据库迁移操作。

Sequelize 可以帮助我们更轻松地实现数据库迁移。Sequelize 提供了一个称为迁移的工具来管理数据库的变更。迁移工具可以创建新表,添加新字段,删除现有字段,更新表约束等等。这个过程通常被称为数据库迁移。

如何实现数据库迁移?

有三个主要步骤,可以帮助我们使用 Sequelize 进行数据库迁移:创建迁移文件,编辑迁移文件,执行迁移文件。

  1. 创建迁移文件

为了创建一个 Sequelize 迁移文件,我们需要使用以下 Sequelize-cli 命令:

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

在这个命令中, create-table-name 是你要创建的迁移文件名称。在你运行迁移命令之前,Sequelize 将为你创建一个新的迁移文件。

  1. 编辑迁移文件

在新建的迁移文件中,你会看到两个基本函数。一个是 up 函数,一个是 down 函数。在运行迁移命令时,Sequelize 对这两个函数之一进行调用。

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

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

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

上述例子中, up 函数会创建一个名为 table_name 的新表。表中有3列(column_1column_2column_3)。而 down 函数则是用于回滚表,即删除创建的表。

在这个示例中,我们使用了 Sequelize 函数 queryInterface.createTablequeryInterface.dropTablequeryInterface 是一个 Sequelize 对象,位于迁移文件中。这个对象提供了一系列常用的数据库迭代方法,如创建表格、添加或删除列、创建或删除约束等。

  1. 执行迁移文件

要执行/往数据库中应用迁移,我们需要通过 Sequelize-cli 特定的命令行命令。命令行命令的形式是如下所示:

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

当你运行上述命令时,Sequelize 将执行在迁移文件 up 函数中编写的 SQL 语句。在上面的例子中,这些 SQL 语句会创建一个名为 table_name 的表,并包含3个列。每次运行 migrate 命令时,Sequelize 都会记录当前版本,并在成功执行迁移文件后更新当前版本。

如果你想回滚迁移(即删除表),可以使用命令行命令:

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

回滚命令将反向执行 down 函数中编写的 SQL 语句并删除某些表和列。

示例代码

下面是一个使用 Sequelize 和 Express.js 实现数据库迁移的示例代码:

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

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

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

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

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

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

上述代码中,我们首先导入必要的依赖项:Sequelize、DataTypes 和 Express.js。Sequelize 库中的 DataTypes 对象提供了定义列的数据类型的方法。

然后,我们创建一个基于 SQLite 的数据库,并定义一个名为 User 的表。我们定义了这个表的结构,并指定了每个列的数据类型。接下来,我们在 Express.js 中创建了一个简单的路由。当用户访问 /migrate 路径时,sync 函数会执行,删除所有表,并重新创建表。到这里,我们的迁移就完成了。

结论

使用 Sequelize 进行数据库迁移可以是你的开发工作变得非常灵活和可靠。使用 Sequelize,你可以很容易地在不删除数据的情况下更新应用程序的数据模型。记住,使用 Sequelize 进行数据库迁移时,你需要先创建一个迁移文件,然后编辑文件中的 SQL 语句,最后使用 sequelize-cli 命令保存 SQL 语句,以便在应用程序中运行。

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