前言
Node.js 是一个非常流行的 JavaScript 服务端运行环境。它的强大和灵活性使得它成为了开发 Web 应用的首选。而在 Node.js 中使用 ORM(对象关系映射)来管理数据库,可以更加方便地操作数据,提高开发效率。
Sequelize 是一个 Node.js 中的 ORM 工具,它支持 PostgreSQL、MySQL、SQLite 和 MSSQL 数据库。在这篇文章中,我们将重点介绍 Sequelize 在 Node.js 中使用 PostgreSQL 数据库的情况。
安装和配置
首先,我们需要安装 Sequelize 和 PostgreSQL 数据库。如果你已经安装了 PostgreSQL 数据库,可以直接开始安装 Sequelize:
npm install --save sequelize sequelize-cli pg
在安装完 Sequelize 后,我们需要创建一个配置文件 config.js
,用于连接 PostgreSQL 数据库:
-- -------------------- ---- ------- -------------- - - ------------ - --------- ----------- --------- ----------- --------- ----------- ----- ------------ -------- ----------- -- --
建立模型
在 Sequelize 中,我们使用模型来映射数据库表。模型用于描述表结构和数据类型,并提供了操作表的方法。以下是一个简单的模型例子:
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- --------- - --------------------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ----- -- ----- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ---------- ------ -- -- - ---------- -------- --- -------------- - ----
在上面的例子中,我们定义了一个名为 User
的模型,它对应了一个名为 users
的表,拥有 id
、name
和 age
三个字段。
数据库迁移
在使用 Sequelize 管理数据库时,一个非常重要的概念是“数据库迁移”。数据库迁移指的是当我们需要对数据库中的表结构进行更改时,我们需要使用 Sequelize 提供的迁移工具来对数据库进行升级或降级,以保证数据结构的一致性。
以下是一个简单的数据库迁移例子:
- 创建迁移文件:
npx sequelize-cli migration:generate --name=create-user
- 修改迁移文件,添加需要升级的内容:
-- -------------------- ---- ------- -------------- - - --- ----- ---------------- ---------- -- - ----- ----------------------------------- - --- - ----- ------------------ ----------- ----- -------------- ----- -- ----- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ---------- ------ -- ----------- - ----- --------------- ---------- ------ ------------- --------------------------- -- ----------- - ----- --------------- ---------- ------ ------------- --------------------------- -- --- -- ----- ----- ---------------- ---------- -- - ----- ---------------------------------- - --
在上述代码中,我们创建了一个名为 users
的表,并定义了 id
、name
、age
、created_at
和 updated_at
字段。
- 运行迁移:
npx sequelize-cli db:migrate
通过运行以上命令,我们成功将 create-user
迁移文件中定义的表结构升级到数据库中。
模型关联
在一些实际应用中,一个模型常常需要和其他模型进行关联,以提高数据处理的效率。Sequelize 提供了多种关联类型及其相应的关联方式。
以下是一些常用的关联及其示例代码:
一对一
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- --------- - --------------------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ----- -- ----- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ---------- ------ -- -- - ---------- -------- --- ----- ------- - --------------------------- - --- - ----- ------------------ ----------- ----- -------------- ----- -- --------- - ----- ----------------- ---------- ------ -- --------- - ----- ----------------- ---------- ------ -- -- - ---------- ----------- --- -------------------- - ----------- --------- --- ----------------------- - ----------- --------- --- -------------- - - ----- ------- --
在上述代码中,我们定义了两个模型 User
和 Account
,并将它们之间建立了一对一的关联。在 User
模型中,我们使用 hasOne
方法定义了 Account
模型作为其关联,指定了 foreignKey
为 user_id
,表示使用 user_id
字段进行关联。而在 Account
模型中,我们使用 belongsTo
方法定义了 User
模型作为其关联,同样指定了 foreignKey
为 user_id
。
一对多
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- --------- - --------------------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ----- -- ----- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ---------- ------ -- -- - ---------- -------- --- ----- ------- - --------------------------- - --- - ----- ------------------ ----------- ----- -------------- ----- -- ------ - ----- ----------------- ---------- ------ -- -------- - ----- --------------- ---------- ----- -- -- - ---------- ----------- --- --------------------- - ----------- --------- --- ----------------------- - ----------- --------- --- -------------- - - ----- ------- --
在上述代码中,我们定义了两个模型 User
和 Article
,并将它们之间建立了一对多的关联。在 User
模型中,我们使用 hasMany
方法定义了 Article
模型作为其关联,同样指定了 foreignKey
为 user_id
。而在 Article
模型中,我们使用 belongsTo
方法定义了 User
模型作为其关联,也指定了 foreignKey
为 user_id
。
多对多
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- --------- - --------------------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ----- -- ----- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ---------- ------ -- -- - ---------- -------- --- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ----- -- ----- - ----- ----------------- ---------- ------ -- -- - ---------- -------- --- ----- -------- - ---------------------------- - --- - ----- ------------------ ----------- ----- -------------- ----- - -- - ---------- ------------- --- ------------------------ - -------- -------- --- ------------------------ - -------- -------- --- -------------- - - ----- ---- --
在上述代码中,我们定义了三个模型 User
、Role
和 UserRole
,并将它们之间建立了多对多的关联。UserRole
是一个中间表,用于存储 User
和 Role
之间的关联信息。在 User
模型中,我们使用 belongsToMany
方法定义了 Role
模型作为其关联,并指定了使用中间表 UserRole
进行关联。在 Role
模型中也是同样的方式定义关联。
查询操作
在 Sequelize 中,我们可以使用多种方法来进行数据的查询操作。以下是一些常用的查询操作及其示例代码:
查询所有记录
const { User } = require('./models'); const users = await User.findAll(); console.log(users);
上述代码中使用了 findAll
方法来查询所有 User
表中的记录,并将结果保存在了变量 users
中。
根据条件查询记录
const { User } = require('./models'); const users = await User.findAll({ where: { age: { [Op.gt]: 20 }, }, }); console.log(users);
通过定义 where
条件,我们可以对记录进行筛选。在上述代码中,我们筛选了所有 age
大于 20 的记录,并将结果保存在变量 users
中。
插入新记录
const { User } = require('./models'); const user = await User.create({ name: 'John Doe', age: 30 }); console.log(user);
使用 create
方法可以向数据库中插入新的记录。在上述代码中,我们插入了一条 name
为 “John Doe”、age
为 30 的新记录,并将结果保存在了变量 user
中。
修改记录
const { User } = require('./models'); const user = await User.findOne({ where: { id: 1 } }); user.name = 'Jane Doe'; await user.save(); console.log(user);
使用 findOne
方法可以根据条件查询一条记录。在上述代码中,我们查询了 id
为 1 的 User
记录,并将其名称修改为 “Jane Doe” 并保存。
删除记录
const { User } = require('./models'); const user = await User.findOne({ where: { id: 1 } }); await user.destroy(); console.log(user);
使用 destroy
方法可以删除指定的记录。在上述代码中,我们查询了 id
为 1 的 User
记录,并将记录从数据库中删除。
结论
Sequelize 是一个非常强大的 ORM 工具,它可以帮助我们更方便地操作 PostgreSQL 数据库。在本文中,我们介绍了 Sequelize 的安装和配置、模型的建立、数据库迁移、模型关联以及查询操作等内容。希望通过这篇文章的介绍,可以帮助大家更好地理解和使用 Sequelize 这个工具,提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66fcc09f447136260172a51c