使用 Sequelize 操作 Oracle 数据库的方式详解

Sequelize 是一个 Node.js ORM,支持多种数据库,其中包括 Oracle 数据库。本文将介绍如何使用 Sequelize 来连接和操作 Oracle 数据库。

准备工作

  1. 安装 Sequelize:可以通过 npm 来安装 sequelize 和 sequelize-cli:

  2. 安装 Oracle 客户端驱动程序:由于 Sequelize 并不自带对 Oracle 数据库的支持,需要安装对应的客户端驱动程序。

    目前有两个可用的驱动:

    • oracledb:Oracle 官方提供的连接驱动,需要预先安装 Oracle 客户端,支持大部分功能,但安装比较繁琐。
    • simple-oracledb:一个使用基于 JavaScript 实现的 Oracle 客户端的 Sequelize 插件,简单易用,不需要额外安装 Oracle 客户端。

    在本文中我们将使用 simple-oracledb。

  3. 准备 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


纠错反馈