Sequelize 中的数据迁移技巧

阅读时长 9 分钟读完

前言

在开发过程中,频繁地进行数据库架构的改变是一件很常见的事情。而如何高效地保证数据库迁移的正确性,成为团队协作的一个重要问题。

本文将介绍 Sequelize 中的数据迁移技巧,包含快速上手指南和最佳实践,帮助读者提升迁移数据的能力,减少迁移出错的概率。

快速上手 Sequelize 迁移库

Sequelize 是一个基于 Promise 的 Node.js ORM。它支持 MySQL、PostgreSQL、SQLite、Microsoft SQL Server 等多种数据存储方式,便于应用程序开发者进行数据操作。

以下是快速上手 Sequelize 迁移库的步骤:

步骤一:安装 Sequelize 和 CLI

在项目中安装 sequelize 和 sequelize-cli 两个库:

步骤二:初始化迁移库

在项目中创建迁移库:

执行后会在项目中创建迁移需要的文件夹和文件:config、migrations、models、seeders。

步骤三:生成数据库表迁移文件

在项目中创建迁移文件:

执行后会在 migrations 文件夹中创建一个新的迁移文件。打开文件,添加需要迁移的表结构信息。

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

步骤四:执行数据库表迁移

在项目中执行数据库表迁移操作:

如果需要撤回迁移,执行:

以上即是快速上手 Sequelize 迁移库的所有步骤。

Sequelize 数据迁移库最佳实践

使用 timestamps 实现自动追踪表的创建和更新时间

Sequelize 提供 timestamps 选项来自动维护表的创建时间和更新时间。在创建表时增加 timestamps: true 即可实现该功能。

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

使用 Sequelize CLI 完成多个迁移文件的顺序控制

Sequelize CLI 支持多个迁移文件的顺序控制。在多个迁移文件中,Sequelize 会按照文件名进行顺序控制。文件名以 “YYYYMMDDHHMMSS” 开头,例如:“20200101010101-create-user.js”。对于相同的时间戳,Sequelize 将按照字母顺序进行排序。

比如要创建 users 表和 articles 表,可以采用类似以下的文件名:

执行迁移时会按照创建时间对文件进行排序,确保按照用户表和文章表的创建顺序进行迁移。

避免在迁移文件中写入硬编码值

在迁移文件中,写入的硬编码值可能导致未来的迁移失败。因此,建议使用 Sequelize 提供的数据类型常量,例如:Sequelize.STRING、Sequelize.DATE 等。同时,注意写入的值必须符合数据库的要求,比如在使用 Sequelize.INTEGER 时必须设置 allowNull 为 false 或 true。

使用常量的值时,也应该将它们从 config 文件或环境变量中导入。这样,在之后的下游环境中,在此配置文件或变量中的设置将用于正确的部署和更改数据库。

将添加表和表字段的操作与删除表和表字段的操作放在一起

在每个迁移文件中,应该考虑将添加一张表的操作与删除它放在一起。同样,应该将添加字段的操作与删除它放在一起。

这样,当迁移失败时,可以使用回滚操作来还原迁移。否则,您可能需要手动清理并恢复损坏的表和字段,这将是非常困难的。

使用事务保证迁移操作的完整性

当添加或删除多张表时,可能会在某一张表成功创建后,由于某些原因失败,导致整个迁移操作失败。如果没有适当的事务管理机制,就会导致出现非常严重的问题。

Sequelize 为我们提供了事务管理机制。使用 queryInterface.transaction() 将相同的 queryInterface 对象方法视为一个事务:

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

重命名列时先添加新列,再删除旧列

对于要重命名一个字段的操作,可以在添加一个新列时进行,然后在确认细节和数据正常后,将旧列从表中删除。

此外,重命名列时应该明确指定现在使用的 Sequelize 数据类型,以便迁移文件保持一致,以便更好地可读。

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

总结

本文基于 Sequelize,介绍了数据迁移库的基本操作和最佳实践,以及事务、顺序等概念。希望这些技巧和学习经验能够为读者提供实用指南,帮助团队在数据库架构改变时更好地协作,减少出错。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6456257a968c7c53b096729d

纠错
反馈