在进行 Node.js 开发时,使用 Sequelize 链接 MySQL 数据库时,常常会遇到 “ER_BAD_FIELD_ERROR: Unknown column” 的错误提示,导致操作数据库失败。本文将解析这个错误提示的原因,以及如何解决这个问题。
原因分析
当我们在使用 Sequelize 进行操作 MySQL 数据库时,如果操作的字段不存在,就会出现 “ER_BAD_FIELD_ERROR: Unknown column” 的错误提示。这种错误提示主要是因为 Sequelize ORM 对数据库进行操作时,读取了一些非本项目定义的表或字段,导致出现了未知的字段错误。
解决方法
- 列名拼写错误
检查操作的表的列名是否拼写正确,或者是否存在数据库表中,如果不存在,则需要修改表结构或者调整执行的 SQL 语句,操作正确的列名。
示例代码:
-- -------------------- ---- ------- ----- --------- - --- --------------------- ----------- ----------- - ----- ------------ -------- -------- --- ----- ---- - ------------------------ - --------- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ---------- ------ -- --- -------------- ----------- ------------ ---------- -------- ----- ---
如果运行上述代码,就会出现 “ER_BAD_FIELD_ERROR: Unknown column 'gender' in 'field list'” 的错误提示。所以需要修改代码,把 "gender" 列名改为正确的列名。
修改后的代码:
User.findOne({ attributes: ['username', 'age'], // age 列名存在 });
- 表名拼写错误
检查操作的表名是否拼写正确,或者是否存在数据库中,如果不存在,则需要在数据库中创建正确的表名。
示例代码:
-- -------------------- ---- ------- ----- --------- - --- --------------------- ----------- ----------- - ----- ------------ -------- -------- --- ----- ---- - ------------------------ - --------- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ---------- ------ -- --- ----- ----- - ------------------------ - -- ---- ------ -------- - ----- ------------------ ----------- ----- -------------- ----- -- --- ------------------- - ----------- -------- --- ----------------------- ------ - ------- - - ---------------- -- - ------------------------- ---
运行上述代码会出现 “ER_BAD_FIELD_ERROR: Unknown column 'oder.userId' in 'where clause'” 的错误提示,所以需要把 "Order" 的表名改为正确的表名。
修改后的代码:
-- -------------------- ---- ------- ----- ----- - ------------------------- - -- ----- ---- -------- - ----- ------------------ ----------- ----- -------------- ----- -- --- ------------------- - ----------- -------- --- ----------------------- ------ - ------- - - ---------------- -- - ------------------------- ---
- 关联查询错误
检查关联查询时,操作的列是否在关联表中存在,如果不存在,就需要修正关联查询代码。
示例代码:
-- -------------------- ---- ------- ----- --------- - --- --------------------- ----------- ----------- - ----- ------------ -------- -------- --- ----- ---- - ------------------------ - ------- - ----- ------------------ ----------- ----- -------------- ----- -- --------- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ---------- ------ -- --- ----- ----- - ------------------------- - -------- - ----- ------------------ ----------- ----- -------------- ----- -- ---------- - ----- ----------------- ---------- ------ -- --- ------------------- - ----------- -------- --- --------------- ------ - ------------- -- -- -- -------- --- -- -------- -- ------ ----- ----------- ------------- --- -------------- -- ---------------------
运行上述代码会出现 “ER_BAD_FIELD_ERROR: Unknown column 'userId.age' in 'where clause'” 的错误提示,需要修改操作的列名。
修改后的代码:
Order.findAll({ where: { 'user.age': 20 }, // 修改为正确的列名 include: [{ model: User, attributes: ['username'], }], }).then(result => console.log(result));
总结
“ER_BAD_FIELD_ERROR: Unknown column” 错误提示主要是由于 Sequelize ORM 读取到了未知的表或字段,我们需要检查代码中的表名和列名是否拼写正确,或者检查关联查询时,操作的列是否在关联表中存在。只有正确的列名和表名,才能从 MySQL 数据库中获取正确的数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ace70e48841e98948f83a6