Sequelize 是一个 Node.js ORM,支持多种数据库,其中包括 Oracle 数据库。本文将介绍如何使用 Sequelize 来连接和操作 Oracle 数据库。
准备工作
安装 Sequelize:可以通过 npm 来安装 sequelize 和 sequelize-cli:
npm install sequelize sequelize-cli
安装 Oracle 客户端驱动程序:由于 Sequelize 并不自带对 Oracle 数据库的支持,需要安装对应的客户端驱动程序。
目前有两个可用的驱动:
- oracledb:Oracle 官方提供的连接驱动,需要预先安装 Oracle 客户端,支持大部分功能,但安装比较繁琐。
- simple-oracledb:一个使用基于 JavaScript 实现的 Oracle 客户端的 Sequelize 插件,简单易用,不需要额外安装 Oracle 客户端。
在本文中我们将使用 simple-oracledb。
npm install simple-oracledb
准备 Oracle 数据库环境:在本地或者远程搭建一个 Oracle 数据库实例,创建一个测试数据库和一张表,以便后续测试。
连接数据库
在 Sequelize 中,建立与 Oracle 数据库的连接需要一些必要的参数。下面是一个连接 Oracle 数据库的示例代码:
const { Sequelize } = require('sequelize'); const SimpleOracleDB = require('simple-oracledb'); // 使用 simple-oracledb 作为 Oracle 驱动 const sequelize = new Sequelize({ dialect: 'oracle', database: 'your_database_name', username: 'your_username', password: 'your_password', host: 'your_host', port: 'your_port', dialectModule: SimpleOracleDB, }); await sequelize.authenticate(); console.log('Connection has been established successfully.');
在建立连接时,参数的详细说明如下:
dialect
:指定使用的数据库类型,需要设置为 'oracle'。database
:指定连接的数据库名称。username
:指定连接的用户名。password
:指定连接的密码。host
:指定连接的主机名。port
:指定连接的端口号。dialectModule
:指定使用的 Oracle 驱动程序,这里我们使用 simple-oracledb。
定义模型
在 Sequelize 中,我们可以使用模型(Model)来访问数据库表。每个模型都对应一个数据库表,可以通过模型来进行增删改查等操作。
定义模型需要一个 Sequelize 实例,下面是一个示例:
const { DataTypes } = require('sequelize'); // 定义模型 const User = sequelize.define('user', { id: { type: DataTypes.INTEGER, primaryKey: true }, name: { type: DataTypes.STRING }, age: { type: DataTypes.INTEGER }, }, { timestamps: false }); // 同步模型和数据库结构(如果数据库结构不存在,则会自动创建) await User.sync();
在定义模型时,我们需要给出表的结构和一些配置,包括:
name
:指定模型名称,也就是底层表的名称。- 表结构定义:每个字段对应一个属性,包括字段名称、类型、是否允许为空等信息。这里我们使用了 DataTypes 枚举类来定义。
timestamps
:是否需要定义 createdAt 和 updatedAt 字段,默认为 true。
定义好模型后,可以使用sync()
方法来同步模型结构和数据库结构。如果数据库表结构不存在,则会自动创建。
CRUD 操作
使用 Sequelize,我们可以轻松进行增删改查等操作。
添加数据
// 添加一条数据 await User.create({ id: 1, name: '张三', age: 18 }); // 添加多条数据 await User.bulkCreate([ { id: 2, name: '李四', age: 20 }, { id: 3, name: '王五', age: 22 }, ]);
通过 create 和 bulkCreate 方法可以添加一条或多条数据。在添加数据时,需要传入一个对象或一个数组,包含数据表中的每一列数据。
查询数据
// 查询所有数据 const allUsers = await User.findAll(); // 查询单条数据 const user = await User.findOne({ where: { id: 1 } }); // 按条件查询数据 const someUsers = await User.findAll({ where: { age: { [Op.lt]: 22, }, }, }); // 排序查询 const sortedUsers = await User.findAll({ order: [['age', 'DESC']], }); // 分页查询 const pagedUsers = await User.findAll({ offset: 10, limit: 5, });
通过 Sequelize 的模型对象,我们可以使用 findAll 和 findOne 方法查询数据。在查询时,我们可以给定一些条件,如年龄小于 22 的用户,通过 where 字段传递给 findAll 和 findOne 方法。
为了进一步控制查询结果,我们还可以使用 order 和 limit 选项,如排序查询和分页查询。
更新数据
// 更新单条数据 await User.update({ name: '张三三' }, { where: { id: 1 } }); // 按条件更新数据 await User.update({ age: 25 }, { where: { age: { [Op.lt]: 22, }, }, });
使用 update 方法可以更新一条或多条数据。在更新时,我们可以给定更新后的数据,以及更新的条件。
删除数据
// 删除单条数据 await User.destroy({ where: { id: 1 } }); // 按条件删除数据 await User.destroy({ where: { age: { [Op.gt]: 30, }, }, });
使用 destroy 方法可以删除一条或多条数据。在删除时,我们需要给定删除的条件。
总结
本文介绍了使用 Sequelize 来连接和操作 Oracle 数据库的方法,并使用了一个示例代码演示了如何进行 CRUD 操作。Sequelize 提供了良好的封装和 API,方便开发者在 Node.js 中操作不同类型的数据库。
代码中涉及到的数据库操作是必要而常见的,相信掌握后一定会在工作中提供大有帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a88236add4f0e0ff1a3fc8