前言
在现代化的 Web 开发中,数据库是不可或缺的组成部分之一。而 PostgreSQL 数据库被认为是最先进、最可靠的开源数据库之一。在 Node.js 开发中,Sequelize 是一个十分强大的 ORM(Object-Relational Mapping)库,它可以帮助我们更加便捷地操作各种关系型数据库。在本文中,我们将介绍如何使用 Sequelize 来操作 PostgreSQL 数据库,包括安装配置,基本的 CRUD 操作,以及一些高级用法。
安装及配置
首先,我们需要在 Node.js 项目中安装 Sequelize 和 Sequelize-CLI 。可以使用以下命令:
npm install sequelize sequelize-cli pg pg-hstore
安装 Sequelize 后,我们需要配置 Sequelize。在项目根目录下新建一个 .sequelizerc
文件,并写入以下内容:
const path = require('path'); module.exports = { 'config': path.resolve('config', 'database.js'), 'models-path': path.resolve('app', 'models'), 'seeders-path': path.resolve('app', 'seeders'), 'migrations-path': path.resolve('app', 'migrations'), };
然后,在 config
目录下,新建一个 database.js
文件,并写入以下内容:
-- -------------------- ---- ------- -------------- - - ------------ - --------- ----------- --------- ----- --------- ----------------------- ----- ------------ -------- ----------- -- ----- - --------- ----------- --------- ----- --------- ---------------- ----- ------------ -------- ----------- -- ----------- - --------- ----------- --------- ----- --------- ---------------------- ----- ------------ -------- ----------- -- --展开代码
这个文件定义了三个环境:开发、测试和生产环境。我们需要根据自己的情况修改用户名、密码、数据库名称和 IP 地址。这里使用的是本地的 PostgreSQL 数据库,IP 地址为 127.0.0.1
。
创建模型
在使用 Sequelize 操作数据库的过程中,我们需要定义模型。模型是指映射到数据库表的类,它包含了表的结构、约束和方法。可以使用 Sequelize-CLI 来生成模型。在命令行中输入以下命令:
sequelize model:create --name User --attributes name:string,email:string
这个命令创建了一个名为 User
的模型,包含两个属性:name
和 email
,它们的类型分别为 string
。
在新建模型后,同样使用 Sequelize-CLI 来生成对应的数据库表。在命令行中输入以下命令:
sequelize db:migrate
这个命令执行数据库迁移,将我们的模型映射到一个 users
表中。
查询数据
在完成了上述步骤后,我们就可以开始使用 Sequelize 来操作数据库了。假设我们已经创建了一个 User
模型,包含 name
和 email
两个属性,我们可以使用以下代码来查询所有用户:
const User = require('../models').User; User.findAll().then(users => { console.log(users); });
这个代码调用了 findAll()
方法,这个方法返回一个 Promise。当 Promise 被解决时,它将返回查询结果,即所有的用户。我们可以使用 .then()
方法获取这个结果并打印出来。
添加数据
在使用 Sequelize 添加数据时,我们需要根据模型的定义创建一个实例对象。假设我们要添加一个名为 John,邮箱为 john@example.com 的用户,我们可以使用以下代码:
const User = require('../models').User; User.create({ name: 'John', email: 'john@example.com' }).then(user => { console.log(user); });
这个代码使用了 create()
方法来创建一个新的用户。当 Promise 被解决时,它将返回刚刚创建的用户对象,并打印出来。
更新数据
在使用 Sequelize 更新数据时,我们需要首先查询要更新的数据,并创建一个更新后的值,然后调用更新方法。假设我们要将名称为 John 的用户更新为 Alice,邮箱更新为 alice@example.com,我们可以使用以下代码:
-- -------------------- ---- ------- ----- ---- - -------------------------- -------------- ------ - ----- ------ - ------------ -- - -- ------ - ------------- ----- -------- ------ ------------------- ------------------- -- - ------------------------- --- - ---展开代码
这个代码首先使用 findOne()
方法查询名称为 John 的用户。如果找到了这个用户,我们就可以使用它的 update()
方法来更新它的名称和邮箱。当 Promise 被解决时,它将返回更新后的用户对象,并打印出来。
删除数据
在使用 Sequelize 删除数据时,我们需要首先查询要删除的数据,然后调用删除方法。假设我们要删除名称为 Alice 的用户,我们可以使用以下代码:
-- -------------------- ---- ------- ----- ---- - -------------------------- -------------- ------ - ----- ------- - ------------ -- - -- ------ - ---------------------- -- - ----------------- ----------- --- - ---展开代码
这个代码首先使用 findOne()
方法查询名称为 Alice 的用户。如果找到了这个用户,我们就可以使用它的 destroy()
方法来删除它。当 Promise 被解决时,它将打印出删除用户的信息。
高级用法
在使用 Sequelize 操作 PostgreSQL 数据库时,我们还可以使用一些高级用法。以下是一些示例代码:
- 使用 Sequelize 进行连接池配置:
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- --------- - --- ----------- --------- ------------- --------- --------- --------- ------------- -------- ----------- --------------- - ---- - -------- ----- ------------------- ----- - -- ----- - ---- -- ---- -- ----- ----- - --- -------------- - ----------展开代码
这个代码示例配置了一个连接池,最大连接数为 5,最小连接数为 0,空闲连接在 10 秒钟后被删除。同时,它还指定了 SSL 选项,以便安全地连接到数据库。
- 使用 Sequelize 进行原始 SQL 查询:
-- -------------------- ---- ------- ----- - --------- - - --------------------- ----- --------- - --- --------------------- ----------- ----------- - -------- ---------- --- ------ -- -- - ----- --------- --------- - ----- ----------------------- - ---- -------- --------------------- -----展开代码
这个代码示例演示了如何使用 Sequelize 进行原始 SQL 查询。sequelize.query()
方法返回了查询结果和元数据,我们可以使用解构语法来分别获取它们。
结语
在这篇文章中,我们介绍了如何使用 Sequelize 操作 PostgreSQL 数据库。我们详细讲述了安装配置、基本的 CRUD 操作,以及一些高级用法。希望这篇文章能够为你在开发中的 PostgreSQL 使用提供帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c9390be46428fe9e0566e2