详解 Sequelize 中的 Model 和 Instance

阅读时长 4 分钟读完

Sequelize 是一款 Node.js 的 ORM 库,支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server 等。在 Sequelize 中,我们会经常用到 Model 和 Instance,这两个术语对于理解 Sequelize 的工作原理非常重要。

Model

在 Sequelize 中,Model 代表了一个数据库表。每一个 Model 都包含了该表的结构定义和操作方法。使用 Sequelize 定义 Model 的代码示例如下:

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

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

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

上面的代码定义了一个名为 User 的 Model,它对应了一张名为 users 的数据库表。这张表包含了 idnameageemail 四个字段。其中,id 是一个自增的整型字段,同时也是该表的主键。

在定义 Model 的时候,我们需要指定每个字段的数据类型、是否允许为空、默认值以及其他约束条件,比如唯一性。这些限制将被用于自动创建、更新以及验证数据库中的记录。

在 Sequelize 中,我们可以使用 Model 的各种操作方法来操作数据库。比如,我们可以使用以下代码往 users 表中插入一条新记录:

Instance

在 Sequelize 中,Instance 代表了一个数据库表中的一条记录。每一个 Instance 都包含了该记录的属性和操作方法。使用 Sequelize 创建一个 Instance 的代码示例如下:

上面的代码从 users 表中查询出了 id 为 1 的行,并创建了一个名为 user 的 Instance。我们可以使用该 Instance 的各种操作方法来操作该行记录。比如,我们可以使用以下代码更新这条记录:

上面的代码将 user 对象的 age 属性修改为 19,并使用 save() 方法将修改保存到数据库中。

需要注意的是,Instance 对象是与数据库中的数据相对应的。因此,如果我们没有重新从数据库中查询出记录,而是直接修改了原先查询出的 Instance 对象,这些修改将不会被同步到数据库中。比如,以下代码将不会更新 users 表中的记录:

这段代码将在内存中把 user 对象的 age 属性修改为 20,并输出 20。但是,在读取数据库中的同一条记录后,我们发现它的 age 属性仍然是 19。这是因为我们没有使用 save() 方法将修改同步到数据库中。

总结

在 Sequelize 中,Model 和 Instance 分别代表了数据库中的一张表以及该表中的一条记录。理解这两个概念对于使用 Sequelize 开发应用程序非常重要。通过 Model 和 Instance,我们可以方便地实现多种数据库操作。同时,需要注意的是,操作 Instance 对象并不总是会自动同步到数据库中,我们需要手动调用 save() 方法才能将修改保存到数据库中。

示例代码:https://github.com/Sequelize/sequelize/blob/master/examples/models/user.js

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

纠错
反馈