数据库连接
数据库连接
Sequelize下载安装完成后,紧接着就是利用该模块对数据库建立连接,只有建立连接之后才能进一步对数据库表做常见的DDL等操作。
建立连接
要连接到数据库,必须创建一个 Sequelize 实例。可以通过官方提供的Sequelize构造函数来实现类初始化,查看源码:

如上图可以发现,Sequelize官方提供了四个构造函数,用于创建Sequelize实例,可以灵活配置username、password、uri 等信息,更多连接配置都在options参数中
这里简单通过一些例子来配置构造函数参数,例如:
/**
* 数据库连接
*/
const { Sequelize } = require('sequelize')
// 方法 1: 传递一个连接 URI
const sequelize1 = new Sequelize('sqlite::memory:')
console.log(sequelize1)
const sequelize2 = new Sequelize('postgres://user:pass@142vip.cn:5432/142vip')
console.log(sequelize2)
// 方法 2: 分别传递参数 (sqlite)
const sequelize3 = new Sequelize({
dialect: 'sqlite',
storage: 'path/to/database.sqlite',
})
console.log(sequelize3)
// 方法 2: 分别传递参数 (其它数据库)
const sequelize4 = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
})
console.log(sequelize4)上面的dialect参数是用来指明连接的数据库类型,目前支持的有:
mysqlpostgressqlitemariadbmssqldb2snowflakeoracle
注意:在传递数据库参数的时候,sqlite数据库与其他数据库不一致。
连接池技术
const { Sequelize } = require('sequelize')
const sequelize = new Sequelize({
// ... 连接配置
// 连接池配置
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
},
})
console.log(sequelize)从多个进程连接到数据库,则必须为每个进程创建一个实例,但每个实例都应具有最大连接池大小,以便遵守总最大大小。例如,如果您希望最大连接池大小为 90 并且拥有三个进程,则每个进程的 Sequelize 实例的最大连接池大小应为 30。
读写分离技术
/**
* 配置读写分离
*/
const { Sequelize } = require('sequelize')
/**
* 创建连接实例
*/
const sequelize = new Sequelize('database', null, null, {
dialect: 'mysql',
port: 3306,
// 配置读写分离
replication: {
read: [
{ host: '192.168.125.100', username: 'root', password: 123456 },
{ host: '192.168.125.101', username: 'root', password: 123456 },
],
write: { host: '192.168.125.101', username: 'root', password: 123456 },
},
// 配置连接池
pool: {
max: 20,
idle: 30000,
},
})
console.log(sequelize)测试连接
可以使用 sequelize.authenticate() 函数测试连接是否正常,无法连接数据库时,会抛出异常。
/**
* 连接测试
*/
const { Sequelize } = require('sequelize')
const sequelize = new Sequelize('postgres://user:pass@142vip.cn:5432/142vip')
try {
await sequelize.authenticate()
console.log('连接成功')
}
catch (error) {
console.error('连接失败:', error)
}关闭连接
默认情况下,Sequelize 将保持连接打开状态,并对所有查询使用相同的数据库连接。 如果需要关闭连接,可以 sequelize.close() 函数。例如:
// 关闭sequelize连接,支持async/await调用
sequelize.close()当使用sequelize.close()关闭数据库连接后,不能基于当前的sequelize对象重新打开连接, 需要基于Sequelize重新创建实例才能再一次访问数据库。
配置日志
当数据库连接建立后,可以使用Sequelize提供的API方法进行数据库操作, 大部分API都是异步的,返回的事Promise对象,因此支持async/await操作。
也可以直接使用回调的方式使用API方法,例如:
// 支持async/await操作
sequelize.close()
/**
* 开箱即用Promise API方法
*/
sequelize.close()
.then((e) => {
// 业务逻辑
})
.catch((e) => {
// 异常捕获
})
.finally(() => {
})默认情况下,Sequelize 将记录它执行的每个 SQL 查询并打印在控制台。
Sequelize的构造函数中提供options.logging选项可用于自定义日志输出,默认值是console.log,将日志输出到终端。 也可以自己定义每次Sequelize记录某些内容时执行的函数,使用时仅显示日志函数调用的第一个日志参数。
例如:对于查询日志记录
- 第一个参数是原始查询信息
- 第二个参数(默认情况下隐藏)是
Sequelize对象
/**
* logging选项的常用配置
*/
const sequelize = new Sequelize('postgres://user:pass@142vip.cn:5432/142vip', {
// 默认打印记录到控制台
logging: console.log,
// // 打印所有日志信息
// logging: (...msg) => console.log(msg),
// // 关闭日志打印
// logging: false,
// // 自定义日志信息的展示方式
// logging: msg => logger.debug(msg),
//
// // 自定义任意方式来处理日志信息
// logging: logger.debug.bind(logger)
})更新日志
7e54c-于a3cca-于c0f2d-于e6a79-于