Node.js 操作 SQLite 指南:sqlite3、Sequelize 与 Knex 对比及实战

作者:服务小站

时间:2026-10-31

浏览:508

本文详细介绍在 Node.js 中操作 SQLite 的三种常用方式:sqlite3、Sequelize 和 Knex。重点解析 Knex 的初始化配置、表结构检查及增删改查的具体实现,帮助开发者根据项目需求选择最合适的数据库操作方案,并提供完整的代码示例。

文章目录

了解 SQLite 的基本概念。

SQLite 是一款轻量级的嵌入式关系型数据库,以库文件形式集成于应用程序中。它采用基于文件的数据库格式,无需独立的服务器进程,在资源受限的环境中表现优异。

SQLite 的核心优势。

  • 易于上手:API 设计简洁直观,学习成本低,使用便捷。
  • 零配置:无需复杂的管理设置,仅需一个数据库文件即可启动使用。
  • 资源占用低:数据库文件体积小,内存消耗少,非常适合嵌入式设备或低性能运行环境。
  • 事务支持:具备 ACID 特性,支持事务操作,确保数据完整性及并发控制能力。
  • 跨平台兼容:支持 Windows、macOS、Linux 等多种操作系统。

SQLite 的局限性。

  • 并发限制:作为单用户模式数据库,不支持多写操作并行,高并发读写场景下性能可能受限。
  • 存储容量上限:受文件格式限制,数据库文件大小存在上限。
  • 功能相对基础:相比大型数据库管理系统,功能较为有限,不适合处理大规模复杂数据。

典型应用场景。

  • 移动应用:凭借轻量级特性,广泛用于移动应用开发,用于存储和管理少量结构化数据。
  • 嵌入式系统:小巧且资源占用低,是物联网设备及嵌入式系统的理想数据库选择。
  • 测试与原型开发:在快速开发和测试阶段,可作为临时数据库解决方案,提供便捷的开发测试环境。
  • 小型网站:针对小型网站或个人项目,提供简单可靠的数据库方案,无需部署复杂的数据库服务器。

总体而言,SQLite 在轻量级应用和资源受限环境下优势明显,适用于对性能要求不高、数据量较小或需方便集成的场景。

Node.js 操作 SQLite 的方法。

在 Node.js 中操作 SQLite 主要有三种方式:使用 sqlite3 模块、sequelize 模块或 knex 模块。各方式特点及适用场景各异。

1. sqlite3 模块:

  • 纯 SQLite 数据库驱动,提供底层数据库访问接口。
  • 支持直接使用 SQL 语句进行数据库操作。
  • 适合需要对数据库操作进行细粒度控制的开发者。

2. sequelize 模块:

  • 功能强大的 ORM(对象关系映射)库,支持包括 SQLite 在内的多种数据库。
  • 提供面向对象方式定义模型,便于数据库操作。
  • 自动构建 SQL 查询语句,简化数据库操作流程。
  • 支持事务管理、关联查询等高级功能。
  • 适合需要使用 ORM 进行数据库操作或有复杂业务需求的开发者。

3. knex 模块:

  • SQL 查询构建器,支持包括 SQLite 在内的多种数据库。
  • 通过链式调用方法构建 SQL 查询语句。
  • 支持灵活查询条件、聚合查询、分页等功能。
  • 可直接执行 SQL 语句。
  • 适合对数据库操作有更高灵活性要求的开发者。

最佳方式取决于实际需求。若需底层访问接口或细粒度控制,可选 sqlite3;若需 ORM 或复杂业务处理,可选 sequelize;若需灵活构建 SQL 查询或特定查询需求,可选 knex。

通常根据项目需求选择适合的方式使用 Node.js 操作 SQLite 数据库。

Knex 详细介绍。

官网说明:

Knex 可在 Node.js 和浏览器中用作 SQL 查询构建器,但受 WebSQL 限制(如不能删除表或读取模式)。强烈反对在浏览器中编写在服务器上执行的 SQL 查询,这可能导致严重安全漏洞。浏览器中除 WebSQL 外的构建主要用于学习目的——例如,您可以打开控制台并使用 Knex 对象在此页面上构建查询。

Knex 的主要目标环境是 Node.js,您需要安装 Knex 库,然后安装相应的数据库库:PG 用于 PostgreSQL、CockroachDB 和 Amazon RedShift、PG-Native 用于 PostgreSQL 和原生 C++ libpq 绑定(需安装 PostgreSQL 才能链接到它)、MySQL 用于 MySQL 或 MariaDB、SQLite3 用于 SQLite3 或 Tedious 用于 MSSQL。

使用 Knex 对 SQLite 进行增删改查。

使用 Knex 前需安装 Knex 和数据库驱动,此处使用 SQLite 数据库,因此需安装 sqlite3。

$ npm install knex --save

# Then add one of the following (adding a --save) flag:
$ npm install pg
$ npm install pg-native
$ npm install sqlite3
$ npm install better-sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install oracledb
$ npm install tedious

根据实际需要选择合适的数据库驱动即可。

初始化 Knex 实例。


const knex = require('knex')({
  client: 'sqlite3',
  connection: {
    filename: './database.sqlite'
  }
});

实例化 Knex 时,可传入配置参数进行数据库连接及其他相关配置。常用配置参数如下:

client:指定数据库类型,如 sqlite3、mysql、postgresql 等。

connection:指定数据库连接信息,可以是 URL 字符串或包含连接信息的对象,如 host、port、user、password、database 等。

pool:连接池配置,控制数据库连接的复用和管理,常用配置项有 min、max、idleTimeoutMillis 等。

migrations:迁移文件相关配置,用于数据库迁移管理,包括 directory(迁移文件目录)、tableName(存储迁移记录的表名)等。

seeds:种子数据相关配置,用于初始化数据库,包括 directory(种子数据文件目录)等。

debug:是否开启调试模式,输出 SQL 查询语句和参数。

以下示例代码演示了实例化 Knex 时的配置参数:

const knex = require('knex')({
  client: 'sqlite3',
  connection: {
    filename: './data/db.sqlite3'
  },
  pool: {
    min: 2,
    max: 10
  },
  migrations: {
    directory: './migrations',
    tableName: 'knex_migrations'
  },
  seeds: {
    directory: './seeds'
  },
  debug: true
});

module.exports = knex;

上述示例代码中,使用 SQLite3 作为数据库类型,指定了数据库文件路径。同时配置了连接池的最小连接数和最大连接数。定义了迁移文件和种子数据文件的目录,以及迁移记录表的表名。开启了调试模式,输出 SQL 查询语句和参数。

根据实际需求,可依据以上配置参数进行灵活配置。具体配置项及其含义可参考 Knex 官方文档。

创建数据库表。

在使用 Knex 创建表之前,可通过knex.schema.hasTable()方法检查表是否已存在。以下示例代码展示了使用 Knex 创建表前判断表是否存在的操作:

knex.schema.hasTable('users').then((exists) => {
  if (!exists) {
    return knex.schema.createTable('users', (table) => {
      table.increments('id').primary();
      table.string('name');
      table.string('email');
    });
  }
}).then(() => {
  console.log('Table created successfully');
}).catch((err) => {
  console.error(err);
});

在上述代码中,首先使用knex.schema.hasTable()方法检查名为"users"的表是否存在。若不存在,则执行创建表操作;若存在,则直接跳过创建表步骤。此举可确保在创建表前先判断表是否已存在。

通过这种方式,可避免重复创建表或导致错误。需注意,实际开发中根据业务需求可能需要对表结构进行更精确判断,如检查是否存在特定列等,可根据具体情况扩展。

增删改查操作。

使用 Knex 操作 SQLite 数据库时,可按以下方式执行增删改查操作:

  • 插入数据:
knex('users').insert({
  name: 'John Doe',
  email: 'john.doe@example.com'
}).then(() => {
  console.log('Data inserted successfully');
}).catch((err) => {
  console.error(err);
});
  • 查询数据:
knex.select().from('users').then((rows) => {
  rows.forEach((row) => {
    console.log(row.name, row.email);
  });
}).catch((err) => {
  console.error(err);
});
  • 更新数据:
knex('users')
  .where('id', 1)
  .update({ name: '前端少年汪' })
  .then(() => {
    console.log('Data updated successfully');
  }).catch((err) => {
    console.error(err);
  });
  • 删除数据:
knex('users')
  .where('id', 1)
  .del()
  .then(() => {
    console.log('Data deleted successfully');
  }).catch((err) => {
    console.error(err);
  });

以上代码演示了使用 Knex 操作 SQLite 数据库的基本增删改查操作。根据实际需求,可使用 Knex 提供的更多方法和功能来完成更复杂的数据库操作。

以上就是使用 Node.js 操作 SQLite 的方法的详细内容,更多关于 Node.js 操作 SQLite 的资料请关注本站其它相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章