Sequelize 中文文档翻译

概述

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


猜你喜欢

  • 使用 Socket.io 实现实时文件共享

    随着互联网技术的不断发展,我们逐渐进入了信息时代,文件共享已经成为了一个非常普遍的需求。在前端开发中,我们有时也需要实现实时文件共享的功能,这时候使用 Socket.io 可以帮我们轻松实现这个功能。

    1 年前
  • SASS mixin 的最佳实践

    SASS mixin 的最佳实践 SASS mixin 是前端开发中常用的技术之一。通过 mixin,我们可以定义一组样式,并在需要的地方进行引用。SASS mixin 的使用可以大幅提高代码的复用,...

    1 年前
  • 响应式设计中的蒙层问题和解决方案

    响应式设计中的蒙层问题和解决方案 随着移动设备的普及,越来越多的网站开始采用响应式设计。响应式设计能够根据设备屏幕的不同尺寸,自动调整页面布局和字体大小,以提供更好的用户体验。

    1 年前
  • ESLint 报错解决:Parsing error: Unexpected token =>

    ESLint 报错解决:Parsing error: Unexpected token => 在使用 JavaScript 进行开发的过程中,难免会遇到一些语法问题。

    1 年前
  • 使用 GraphQL 和 Fastify 进行 REST API 开发

    前言 RESTful API 是现代 web 应用程序的一个核心部分。然而,REST API 中存在着一些缺陷,比如需要多次请求来获取数据、需要使用大量验证器等。GraphQL 可以解决这些问题,并带...

    1 年前
  • ES6:解构赋值、扩展运算符、箭头函数的实例操作

    ES6:解构赋值、扩展运算符、箭头函数的实例操作 ES6(ECMAScript 2015)是 JavaScript 的最新标准,这个标准在现代的前端开发中扮演着重要的角色。

    1 年前
  • 使用 Deno 构建 GraphQL 服务端

    GraphQL 是一种用于 API 的查询语言,它允许客户端定义自己需要的数据,从而解决了 REST API 中出现的问题。Deno 是一个新兴的运行时环境,它支持 TypeScript,并且具有安全...

    1 年前
  • 在 Kubernetes 中,如何查找和修复 "kube-proxy" 错误?

    Kubernetes 可以帮助我们管理跨多个计算机的容器化应用程序。在 Kubernetes 集群中,Kube-proxy 是一个必要的组件,它负责将网络流量引导到正确的容器。

    1 年前
  • TypeScript 中如何定义参数类型的别名

    在前端开发中,TypeScript 已经成为了一种非常流行的开发语言。它具有静态类型表达、代码提示、类型检查等功能,在开发过程中能够提高代码的可维护性和可读性。本文将介绍一个 TypeScript 中...

    1 年前
  • 使用 PM2 来监控 Node.js 应用的 SSL 证书过期问题

    SSL(Secure Socket Layer)证书是保护用户信息安全的重要工具,尤其是对于网站、应用等进行数据传输的场景来说,SSL 证书的有效性直接关系到用户数据的安全性。

    1 年前
  • 使用 Chai 和 Karma 进行客户端单元测试

    在前端开发中,单元测试是非常重要的一部分,可以保证代码的质量和稳定性。Chai 和 Karma 是两个常用的 JavaScript 测试工具,在进行客户端单元测试时非常实用。

    1 年前
  • Vue.js 开发中如何实现图片预览效果

    在网站开发中,图片预览效果是用户体验的重要组成部分。本文将详细介绍Vue.js开发中如何实现图片预览效果,并提供一个实例代码。 实现步骤 实现图片预览效果的步骤主要包括: 显示缩略图并点击触发预览 ...

    1 年前
  • Webpack 优化你的构建复杂度并加速构建

    Web前端开发中,资源文件的打包和构建是必不可少的工作,而Webpack作为一个现代化的模块打包器很好地完成了这个任务,同时Webpack也是一个强大的工具,可以通过优化和配置来进一步提高构建性能和效...

    1 年前
  • ES12 中的 Array.of 和 Object.fromEntries:更方便的数据转换

    在 JavaScript 开发中,我们经常需要将不同的数据结构进行转换,比如将一组数据转换为数组,或将对象转换为数组。在 ES12 中,新增了两个方法:Array.of 和 Object.fromEn...

    1 年前
  • PWA 中如何实现自定义页面骨架屏

    自定义页面骨架屏在 PWA(Progressive Web App)中,是提升用户体验的重要手段之一。骨架屏是一种先显示占位图或加载动画,再逐步替换为内容的方式,让用户在等待页面加载时,感觉更加流畅。

    1 年前
  • CSS Flexbox 实现响应式轮播图的方法

    轮播图是网页设计中常见的功能之一,它能够让网站更加生动、吸引人,同时也能展示网站的各种信息内容。在此基础上,响应式轮播图更是目前网站设计中的趋势,其可以在不同设备上展示相应的设计效果。

    1 年前
  • 使用 Cypress 进行前端自动化测试

    Cypress 是一个基于 JavaScript 的开源自动化测试工具,专注于对现代 Web 应用进行端到端(End-to-End)测试。它拥有直观的 API 和丰富的工具集,可以帮助前端开发者高效地...

    1 年前
  • 如何在 Headless CMS 中处理企业网站和卖点

    什么是 Headless CMS Headless CMS 是一种新型的 CMS(Content Management System)架构,它将内容管理和内容展示分离。

    1 年前
  • Express.js 中的 EJS 模板引擎的配置与使用

    EJS (Embedded JavaScript) 是一种嵌入式 JavaScript 模板引擎,它能够在 HTML 或其他文本文件中通过 JavaScript 语法来编写动态内容,从而简化了前端模板...

    1 年前
  • 使用 ES7 async/await 进行数据精准处理

    在前端开发中,数据的处理是非常重要的一部分。ES7 中的 async 和 await 关键字可以帮助我们更加方便和简洁地进行异步操作。本文将介绍如何使用 ES7 async/await 进行数据精准处...

    1 年前

相关推荐

    暂无文章