Sequalize
官网地址: https://sequelize.org/
Sequelize 是一个基于 TS, Node 的关系型数据库 ORM 框架. 重点是支持 MySQL, Oracle, Sqlite 等等数据库.
基本步骤概括:
- 安装 sequelize 和 sqlite3
- 定义模型
- 查询
快速开始
本指南你会了解到使用 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