掘金日新计划&Sequelize知识合集

141 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天

一、引言

Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server。 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。Sequelize 遵从 语义版本控制。 支持 Node v10 及更高版本以便使用 ES6 功能。

二、安装

Sequelize 的使用可以通过 npm 或 yarn

使用 npm :npm i sequelize # 这将安装最新版本的 Sequelize
使用 yarn : yarn add sequelize

你还必须手动为所选数据库安装驱动程序:

# 使用 npm
npm i pg pg-hstore # PostgreSQL
npm i mysql2 # MySQL
npm i mariadb # MariaDB
npm i sqlite3 # SQLite
npm i tedious # Microsoft SQL Server
npm i ibm_db # DB2
# 使用 yarn
yarn add pg pg-hstore # PostgreSQL
yarn add mysql2 # MySQL
yarn add mariadb # MariaDB
yarn add sqlite3 # SQLite
yarn add tedious # Microsoft SQL Server
yarn add ibm_db # DB2

三、 连接到数据库

要连接到数据库,必须创建一个 Sequelize 实例. 这可以通过将连接参数分别传递到 Sequelize 构造函数或通过传递一个连接 URI 来完成:

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

// 方法 1: 传递一个连接 URI
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({
  dialect: 'sqlite',
  storage: 'path/to/database.sqlite'
});

// 方法 3: 分别传递参数 (其它数据库)
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: /* 选择 'mysql' | 'mariadb' | 'postgres' | 'mssql' 其一 */
});

Sequelize 构造函数接受很多参数. 它们记录在 API 参考中.

3.1 测试连接

你可以使用 .authenticate() 函数测试连接是否正常:

try {
  await sequelize.authenticate();
  console.log('Connection has been established successfully.');
} catch (error) {
  console.error('Unable to connect to the database:', error);
}

3.2 关闭连接

默认情况下,Sequelize 将保持连接打开状态,并对所有查询使用相同的连接. 如果你需要关闭连接,请调用 sequelize.close()(这是异步的并返回一个 Promise).

**请注意,在上面的示例中,Sequelize 是指库本身,而 sequelize 是指 Sequelize 的实例,它表示与一个数据库的连接. **

四、 总结

如果你是从头开始一个项目,且你的数据库是空的,那么一开始就可以使用 Sequelize,以便自动创建数据库中的每个表.

除此之外,如果你想使用 Sequelize 连接到已经充满了表和数据的数据库,那也可以正常工作! 在两种情况下,Sequelize 都能满足你的要求.

默认情况下,Sequelize 将记录控制台执行的每个SQL查询. 可以使用 options.logging 参数来自定义每次 Sequelize 记录某些内容时将执行的函数. 默认值为 console.log,使用该值时仅显示日志函数调用的第一个参数. 例如,对于查询日志记录,第一个参数是原始查询,第二个参数(默认情况下是隐藏的)是 Sequelize 对象.

Sequelize 提供的大多数方法都是异步的,因此返回 Promises., 因此你可以直接使用Promise API(例如,使用 thencatchfinally).当然,使用 async 和 await 也可以正常工作.

烟火向星辰,所愿皆成真!