jk's notes
  • Sequalize

Sequalize

官网地址: https://sequelize.org/

Sequelize 是一个基于 TS, Node 的关系型数据库 ORM 框架. 重点是支持 MySQL, Oracle, Sqlite 等等数据库.

基本步骤概括:

  1. 安装 sequelize 和 sqlite3
  2. 定义模型
  3. 查询

快速开始

本指南你会了解到使用 Sequelize 的基本步骤.

安装

可以使用 npm 或 yarn 安装:

npm install -S sequelize

还需要手动安装对应数据库的驱动:

npm install -S pg pg-hstore # Postgres
npm install -S mysql2
npm install -S mariadb
npm install -S sqlite3
npm install -S tedious # MSSQLServer
npm install -S oracledb 

连接数据库

要连接数据库, 必须创建 sequelize 实例. 可以将连接字符串, 或连接用的 URL 传入构造函数.

例如:

const { Sequelize } = require('sequelize');

// 选项1: 传入连接 URL
const sequelize = new Sequelize('sqlite::memory'); // sqlite 实例
const sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname'); // Postgres 实例

// 选项2: 传入分离的参数 (sqlite 示例)
const sequelize = new Sequelize({
  dialog: 'sqlite',
  storage: 'path/to/database.sqlite'
});

// 选项3: 传入分离的参数
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: /* 其中一个: 
  						'mysql',
  						'postgres',
  						'sqlite',
  						'mariadb',
  						'mssql',
  						'db2',
  						'snowflake',
  						'oracle'
  				*/ 
});

Sequelize 构造函数有很多形式的参数, 细节可以参考 API 文档.

测试连接

使用 authenticate() 方法来测试连接. 该方法返回 Promise.

try {
  await sequelize.authenticate()
} catch(err) {
  console.error('无法连接到数据库', err)
}

关闭连接

Sequelize 默认情况下会保持连接. 并对所有查询使用同一个连接.

如果需要关闭连接, 可以调用 sequelize.close(), 该方法返回 Promise.

注意: 一旦关闭连接, 无法再重新连接数据库, 需要创新新的 Sequeslize 实例.

术语约定

上述代码中, 约定 Sequelize 标识库, sequelize 标识实例, 连接某具体数据库.

读取文档

建议在运行下面代码之前阅读一下文档, 如此你会学得更快. 最简单的 sqlite 用法为:

const { Sequelize, Op, Model, DataType } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory');

// 其他运行代码

其他的数据库连接会更为复杂, 细节可以参考仓库: Sequelize SSCCE. 其中包含所有支持数据库的示例.

新数据库与已有数据库

新建数据库表示数据库对象未创建 (数据库, 表等), 而 Sequelize 可以用于创建他们.

而对于已存在的数据库, Sequeslize 也可以使用的很好.

日志

默认情况下, Sequelize 会记录下所有查询的 SQL, 并在控制台将其初输出.

使用 options.logging 选项可修改该行为. 通过定义函数, 来处理 Sequelize 执行 SQL 的数据, 默认是 console.log. 并且只会使用第一个参数.

例如, 查询日志的第一个参数是原始 SQL, 第二个参数 (默认隐藏) 是 Sequelize 对象.

options.logging 一般用法:

const sequelize = new Sequelize('sqlite::memory', {
  // 选择一个 日志选项
  logging: console.log, // 默认的形式, 默认显示第一个参数
  
  logging: (...msg) => console.log(msg), // 会打印所有参数
  
  logging: false, // 不会进行日志输出
  
  logging: msg => logger.debug(msg), // 自定义日志
  
  logging: logger.debug.bind(logger), // 自定义方法, 显示多有的日志信息
});

Promise 与 async/await

大多数 Sequelize API 都是异步的, 并使用 Promize.

核心概念

细节包括:

  • 模型基础
  • 模型实例
  • 模型查询 - 基础
  • 模型查询 - Finder
  • Getter, Setter 与 Virtuals
  • 校验与约束
  • 原始查询
  • Association (关联关系)
  • Paranoid
Last Updated:
Contributors: jk