Sequelize 中连接已存在的 MySQL 数据库出现错误的解决办法

阅读时长 4 分钟读完

前言

Sequelize 是一个 Node.js 中 ORM 库,它支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 MSSQL 等等。Sequelize 能够很好地帮助我们进行数据库操作,实现数据的快速存储和读取。当我们需要在 Sequelize 中连接数据库时,有些人可能会遇到已存在的 MySQL 数据库无法连接的问题。这篇文章将详细介绍如何解决这个问题。

问题描述

使用 Sequelize 连接 MySQL 数据库时,有时候会出现已存在的数据库无法连接的情况。例如,当我们使用如下代码时:

其中,databaseusernamepasswordhost 分别是该数据库的参数。当我们尝试连接一个已存在的 MySQL 数据库时,例如 testdb,通常会报错:

这是因为 Sequelize 默认会尝试使用该名称创建新的数据库,而不是连接已经存在的数据库。那么,该如何解决呢?

解决方法

在 Sequelize 中连接已存在的 MySQL 数据库,我们需要设置配置项 define:{freezeTableName:true},以便使用现有的表。这样我们不需要创建对应的表,而是直接使用现有的表。修改代码如下:

这样,我们就可以成功连接一个已存在的 MySQL 数据库了。

示例代码

为了更好地理解,这里提供一个完整的示例代码。假设我们已经有一个名为 testdb 的 MySQL 数据库,其中包含有一个名为 users 的表,该表具有 idname 两列。

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

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

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

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

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

该示例中,我们使用 Sequelize 连接已存在的 MySQL 数据库,然后使用 User.findAll() 函数来查询 users 表中的所有记录,并将结果打印在控制台上。由于我们设置了 define:{freezeTableName:true}User 模型会直接映射到现有的 users 表上。运行该示例,我们可以看到控制台输出了 users 表中的所有记录:

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

总结

Sequelize 是一个非常强大的 ORM 库,它能够帮助我们更方便地进行数据库操作。当我们需要在 Sequelize 中连接一个已存在的 MySQL 数据库时,使用配置项 define:{freezeTableName:true} 可以解决无法连接的问题。希望这篇文章能够对大家有所帮助。

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

纠错
反馈