Sequelize 中文文档翻译

阅读时长 14 分钟读完

概述

Sequelize 是一款 Node.js ORM 框架,它支持 MySQL、PostgreSQL、SQLite 和 MSSQL 等多种关系型数据库。Sequelize 统一了数据库访问 API,提供丰富的操作方法,并可支持以 Promise 和 async/await 的方式进行异步操作,极大地简化了开发者的编码工作。

本文将对 Sequelize 中文文档进行翻译,并向读者展示 Sequelize 的各种用法和特性,以及如何在实际项目开发中使用 Sequelize。

安装和配置

安装 Sequelize 非常简单,只需要执行一条 npm 命令:

Sequelize 还依赖于相应数据库的 Node.js 驱动程序,以 MySQL 为例,需要执行以下命令:

在使用 Sequelize 之前,还需要进行一些配置工作,比如:

  1. 初始化 Sequelize 实例,并指定要使用的数据库类型、数据库名称、用户名和密码等信息。
  2. 定义模型(Model),即数据库表的数据结构和约束条件。
  3. 实现数据表的关联(Association),即在不同的表之间建立关系,便于数据的查询和更新。

下面分别介绍这些步骤。

初始化 Sequelize

在使用 Sequelize 之前,需要先初始化 Sequelize 实例。Sequelize 提供了一种 config 方式来进行配置,config 实例可以方便地进行全局设置和访问。

在上面的代码中,我们使用 Sequelize 的构造函数创建了一个 sequelize 实例,指定了使用 MySQL 数据库,以及连接的数据库名称、用户名和密码。

定义模型

在 Sequelize 中,我们需要先定义模型,才能进行数据的增删改查操作。模型定义了数据库表的名称、数据类型、索引、约束等信息,可以直接映射到数据库表。

创建模型

创建模型的方法是使用 Sequelize.define() 方法,该方法接收两个参数:模型名称和属性,其中属性是一个对象字面量,用于指定每个字段的类型、长度、约束等信息。

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

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

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

在上面的代码中,我们定义了一个名为 User 的模型,它有三个字段:id、name 和 age。其中,id 是一个自增的整型字段,作为主键;name 是一个字符串类型的字段,不能为空;age 是一个整型字段,不能为空。

另外,我们还通过 freezeTableName 和 name 对模型名称进行了单数形式化处理,使其在生成 SQL 语句时的表名为 users,而不是 sequelize 中定义的 user,方便后续操作。

同步模型到数据库

定义完模型后,需要使用 sequelize.sync() 方法将其同步到数据库中。该方法会检查数据库是否存在对应的表结构,如果不存在,则会创建出表结构;如果已存在,则会刷新表结构,以保证与定义的模型一致。

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

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

在上面的代码中,我们使用 sequelize.sync() 方法将所有定义的模型同步到数据库中,并通过 then/catch 方法处理相关的结果。

实现数据表的关联

在 Sequelize 中,数据表的关联(Association)是一个重要的概念,它指的是在不同表之间建立关系,以便实现数据的联合查询、更新和删除等操作。在 Sequelize 中,数据表的关联包括以下几种:

  • 一对一关联
  • 一对多关联
  • 多对多关联

接下来我们分别介绍这几种关联方式的实现方法。

一对一关联

一对一关联是指两个实体之间只存在一种关联关系,这种关系最常见的应用场景是在数据分析系统中,对于同一个实体可能存在不同的维度信息,需要把这些信息拆分到不同的表中,并通过一对一关联进行查询。

在 Sequelize 中,一对一关联的实现方式很简单,只需要在其中一个模型中使用 hasOne() 方法,另一个模型中使用 belongsTo() 方法即可。

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

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

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

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

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

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

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

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

在上面的示例代码中,我们定义了两个模型:User 和 Member。其中,Member 模型是一个一对一关联表,它与 User 模型之间建立了一对一的关联关系。这里需要注意的是,在 Member 模型中需要使用 belongsTo() 方法指定关联的目标模型,并通过 foreignKey 和 targetKey 指定关联的外键和目标键。

一对多关联

一对多关联是指一个实体与多个实体之间的关联关系,例如一个学院院长管理多个专业的情况。

在 Sequelize 中,一对多关联的实现方式与一对一关联类似,只需要在目标模型上使用 hasMany() 方法,另一个模型使用 belongsTo() 方法即可。

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

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

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

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

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

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

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

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

在上面的示例代码中,我们定义了两个模型:College 和 Major。其中,Major 模型相对于 College 模型是一个一对多关联表,它与 College 模型之间建立了一对多的关联关系。需要注意的是,在 Major 模型中使用 belongsTo() 方法指定关联的目标模型,并通过 foreignKey 和 targetKey 指定关联的外键和目标键。

多对多关联

多对多关联适用于两个实体之间的关联关系不是单向的,而是相互关联的情况,例如学生和课程之间的关联。在这种情况下,我们不仅要建立关联表,还要指定两个实体之间建立关联的键。

在 Sequelize 中,多对多关联的实现方式非常简单,只需要在两个模型之间分别使用 belongsToMany() 方法定义关联即可。

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

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

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

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

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

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

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

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

在上面的示例代码中,我们定义了两个模型:Student 和 Course。其中,Student 模型和 Course 模型之间相互关联,是一个多对多关联表。需要注意的是,在关联映射时需要指定通过哪个中间关系表进行映射,以及定义关联的外键和目标键。

数据查询和更新操作

在 Sequelize 中,我们可以使用模型对象来进行数据查询和更新操作。以下是一些常用的操作:

查找一条数据

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

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

查找多条数据

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

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

删除一条数据

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

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

更新一条数据

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

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

总结

本文介绍了 Sequelize 的相关内容,包括初始化 Sequelize、定义模型、实现关联关系以及数据查询和更新操作等方面。Sequelize 是一款功能强大且易于使用的 ORM 框架,可以极大地简化开发者的编码工作,并提供了丰富的 API 和操作方法,适合用于开发中大型、高并发的 Web 应用。

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

纠错
反馈