Sequelize 操作 MySQL 数据库提示 “ER_BAD_FIELD_ERROR: Unknown column”,该如何解决?

阅读时长 6 分钟读完

在进行 Node.js 开发时,使用 Sequelize 链接 MySQL 数据库时,常常会遇到 “ER_BAD_FIELD_ERROR: Unknown column” 的错误提示,导致操作数据库失败。本文将解析这个错误提示的原因,以及如何解决这个问题。

原因分析

当我们在使用 Sequelize 进行操作 MySQL 数据库时,如果操作的字段不存在,就会出现 “ER_BAD_FIELD_ERROR: Unknown column” 的错误提示。这种错误提示主要是因为 Sequelize ORM 对数据库进行操作时,读取了一些非本项目定义的表或字段,导致出现了未知的字段错误。

解决方法

  1. 列名拼写错误

检查操作的表的列名是否拼写正确,或者是否存在数据库表中,如果不存在,则需要修改表结构或者调整执行的 SQL 语句,操作正确的列名。

示例代码:

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

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

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

如果运行上述代码,就会出现 “ER_BAD_FIELD_ERROR: Unknown column 'gender' in 'field list'” 的错误提示。所以需要修改代码,把 "gender" 列名改为正确的列名。

修改后的代码:

  1. 表名拼写错误

检查操作的表名是否拼写正确,或者是否存在数据库中,如果不存在,则需要在数据库中创建正确的表名。

示例代码:

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

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

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

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

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

运行上述代码会出现 “ER_BAD_FIELD_ERROR: Unknown column 'oder.userId' in 'where clause'” 的错误提示,所以需要把 "Order" 的表名改为正确的表名。

修改后的代码:

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

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

----------------------- ------ - ------- - - ---------------- -- -
  -------------------------
---
  1. 关联查询错误

检查关联查询时,操作的列是否在关联表中存在,如果不存在,就需要修正关联查询代码。

示例代码:

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

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

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

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

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

运行上述代码会出现 “ER_BAD_FIELD_ERROR: Unknown column 'userId.age' in 'where clause'” 的错误提示,需要修改操作的列名。

修改后的代码:

总结

“ER_BAD_FIELD_ERROR: Unknown column” 错误提示主要是由于 Sequelize ORM 读取到了未知的表或字段,我们需要检查代码中的表名和列名是否拼写正确,或者检查关联查询时,操作的列是否在关联表中存在。只有正确的列名和表名,才能从 MySQL 数据库中获取正确的数据。

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

纠错
反馈