在使用数据库时,开发人员经常面临选择是使用原始数据库查询还是利用抽象出一些复杂性的库。 sequelize 就是这样一个库——一种流行的 node.js orm(对象关系映射器),可与 postgresql、mysql 和其他关系数据库配合使用。在本教程中,我们将深入探讨如何在 node.js 上使用 sequelize 连接 postgresql 数据库,包括安装、配置、模型创建和执行 crud 操作。
sequelize 通过在 sql 查询上提供抽象层来简化数据库交互。它在底层利用 pg 库连接到 postgresql。要开始使用 sequelize,请按照以下步骤操作:
初始化您的项目
如果您要开始一个新项目,请初始化 node.js 项目以创建 package.json 文件:
npm init -y
安装 sequelize 和 postgresql 驱动程序
安装 sequelize 以及 postgresql 驱动程序 pg:
npm install pg sequelize
设置数据库配置
在 node.js 应用程序中,您首先需要定义 postgresql 数据库访问变量:
const user = '<postgres_user>'; const host = 'localhost'; const database = '<postgres_db_name>'; const password = '<postgres_password>'; const port = '<postgres_port>';
导入续集
从 sequelize 导入必要的对象:
const { sequelize, model, datatypes } = require('sequelize');
初始化 sequelize
使用您的数据库配置创建一个新的 sequelize 实例:
const sequelize = new sequelize(database, user, password, { host, port, dialect: 'postgres', logging: false });
在这里,我们指定 dialect: 'postgres' 来表示我们正在使用 postgresql。我们还禁用 sql 查询日志记录以保持控制台输出干净,尽管您可以在调试期间启用它。
sequelize 中的模型代表数据库中的表。每个模型都定义了相应表的结构并提供了与之交互的方法。
定义模型
假设您有一个名为 cats 的表,其中包含名称和年龄列。您可以为该表定义 sequelize 模型,如下所示:
class cat extends model {} cat.init({ name: { type: datatypes.string, allownull: false }, age: { type: datatypes.integer, allownull: false } }, { sequelize, modelname: 'cat', timestamps: false });
在此示例中:
- `cat` extends sequelize’s `model` class. - `init()` sets up the model with column definitions and configuration. - we use `datatypes.string` and `datatypes.integer` to define column types. - `timestamps: false` disables automatic timestamp fields (`createdat` and `updatedat`).
sequelize 提供了一系列查询数据库的方法。以下是如何使用 sequelize 检索数据:
检索所有记录
要从 cats 表中获取所有记录:
const results = await cat.findall(); console.log(results);
findall() 返回一个承诺,解析为表示表中行的实例数组。
限制检索的列
如果您只需要某些列,请使用属性选项:
const results = await cat.findall({ attributes: ['age'] }); console.log(results);
添加 where 子句
要过滤结果,请使用 where 选项。例如,要查找所有 8 岁的猫:
const results = await cat.findall({ where: { age: 8 } }); console.log(results);
要查找所有 5 岁或以上的猫:
const { op } = require('sequelize'); const results = await cat.findall({ where: { age: { [op.gte]: 5 } } }); console.log(results);
应用排序和限制
对结果进行排序并限制返回的行数:
const results = await cat.findall({ limit: 10, order: [ ['name', 'desc'] ] }); console.log(results);
要将新记录插入数据库,请使用 create() 方法:
const name = 'garfield'; const age = 8; const result = await cat.create({ name, age }); console.log('new cat:', result);
要更新现有记录,请使用 update() 方法:
await cat.update( { age: 9 }, { where: { name: 'garfield' } } );
如果要更新所有行(这个操作要小心),省略where子句:
await Cat.update( { age: 10 } );
在本教程中,我们探索了如何使用 sequelize 与 postgresql 数据库交互。我们首先安装和配置 sequelize,然后创建模型来表示数据库表。
我们学习了如何使用 sequelize 的方法查询、插入和更新数据。这个强大的 orm 通过提供对 sql 查询的更高级别的抽象来简化关系数据库的使用。
要进一步探索 sequelize 及其功能,请考虑以下资源:
通过利用 sequelize,您可以简化数据库交互并更加专注于构建强大的应用程序。快乐编码!