Sequelize 报错:Unknown column 解决方法

阅读时长 8 分钟读完

在使用 Sequelize 进行数据库操作的过程中,可能会遇到 "Unknown column" 的错误提示。这个错误通常是由于 Sequelize 找不到对应的列名,而导致的查询失败。本文将介绍这个错误的解决方法,并提供示例代码,帮助读者更好地理解。

问题分析

在使用 Sequelize 进行数据库操作时,我们通常会定义一个模型(Model),用于描述数据表的结构。例如,下面是一个简单的 User 模型:

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

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

在定义完模型之后,我们可以使用 Sequelize 提供的方法进行数据库的增删改查。例如,下面是一个简单的查询语句:

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

这个查询语句的作用是查询年龄大于 18 岁的用户,并将结果输出到控制台。但是,如果我们的数据表中没有 age 这个列,那么就会出现 "Unknown column 'User.age' in 'where clause'" 的错误提示。

解决方法

出现 "Unknown column" 错误的原因很简单:Sequelize 找不到对应的列名。因此,我们需要检查一下模型定义是否正确,以及数据库中是否存在对应的列名。如果模型定义没有问题,但是数据库中确实不存在对应的列名,那么我们需要使用 Sequelize 提供的方法来进行数据库迁移(Migration)。

检查模型定义

首先,我们需要检查一下模型定义是否正确。在上面的例子中,我们定义了一个 User 模型,包含了 username、password 和 age 三个属性。如果我们的数据库中没有 age 这个列名,那么就会出现 "Unknown column" 的错误提示。

因此,我们需要检查一下数据库中是否存在 age 这个列名。如果不存在,那么就需要修改模型定义,或者使用 Sequelize 提供的迁移方法进行数据库迁移。

使用迁移方法

如果我们需要在数据库中新增一个列,或者修改一个列的属性,那么就需要使用 Sequelize 提供的迁移方法。例如,下面是一个简单的迁移文件:

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

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

这个迁移文件的作用是在 User 表中新增一个 age 列。具体来说,up 方法会在数据库中新增一个 age 列,down 方法则会将 age 列删除。我们可以使用 Sequelize CLI 工具来执行这个迁移文件:

执行完毕之后,我们就可以在数据库中看到新增的 age 列了。

修改模型定义

如果我们不想使用迁移方法,而是直接修改模型定义,那么也是可以的。例如,我们可以将 User 模型中的 age 属性删除,然后重新定义一个新的 age 属性:

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

在重新定义了 age 属性之后,我们就可以使用新的属性名 age2 来进行数据库操作了。

示例代码

下面是一个完整的示例代码,用于演示如何解决 "Unknown column" 错误:

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

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

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

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

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

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

在这个示例代码中,我们首先定义了一个 User 模型,然后使用 Sequelize 进行数据库操作。由于我们的模型定义和数据库结构不一致,因此会出现 "Unknown column" 的错误提示。为了解决这个问题,我们使用了 Sequelize 提供的迁移方法,在数据库中新增了一个 age 列。最终,我们成功地查询到了年龄大于 18 岁的用户。

总结

"Unknown column" 错误是 Sequelize 中常见的错误之一。如果遇到这个错误,我们需要检查一下模型定义和数据库结构是否一致。如果不一致,就需要使用 Sequelize 提供的迁移方法进行数据库迁移,或者直接修改模型定义。本文提供了详细的解决方法和示例代码,希望能对读者有所帮助。

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

纠错
反馈