前言
Sequelize ORM 是基于 Promise 的 Nodejs ORM。
ORM(Object-relational mapping),对象-关系映射,就是这么一个工具,它能把数据库映射成对象,把对数据库的操作简化成对对象的操作。
起步
安装 Sequelize
npm install --save sequelize
安装数据库驱动器
# 根据实际使用的数据库选择下面其中一个即可:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server
连接数据库,要连接数据库,需要先创建一个Sequelize实例,以下两种方法都可以。
const { Sequelize } = require('sequelize');
// 方法 1: 传递一个URL
const sequelize = new Sequelize('sqlite::memory:') // Example for sqlite
const sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname') // Example for postgres
// 方法 2: 单独传递参数 (sqlite)
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: 'path/to/database.sqlite'
});
// 方法 2: 单独传递参数 (other dialects)
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'/* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
});
测试小技巧
相比如在本地创建数据库,可采用如下方式:
const { Sequelize, Op, Model, DataTypes } = require("sequelize");
const sequelize = new Sequelize("sqlite::memory:");
模型Model
概念
模型是Sequelize的核心概念, 一个model是数据库中一个表的抽象。在Sequelize里它是继承自 Model的class。
模型都有一个名字,这个名字不一定和数据库中的表完全一致(可以任意设置)。一般来说,模型的名字使用单数(比如 User),而数据库中的表名使用复数(Users)。
模型定义
使用 sequelize.define 来定义
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');
const User = sequelize.define('User', {
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING
}
}, {
// Other model options go here
});
// `sequelize.define` also returns the model
console.log(User === sequelize.models.User); // true
模型的同步
把模型的包含的信息单向同步到数据库表中,可以用如下方式
- User.sync() - 如果表不存在,会创建;如果已经存在,什么都不做
- User.sync({ force: true }) - 强制创建新表;如果之前存在先删除
- User.sync({ alter: true }) - 检查表里的字段和模型是否完全一致,如果不一致仅做需要的变更
删除表
await User.drop();
console.log("Users表已删除");
await sequelize.drop();
console.log("所有表已删除!");
关联 Association
Sequelize支持以下标准关联:一对一,一对多和多对多。
- HasOne
- BelongsTo
- HasMany关联
- BelongsToMany关联
要创建One-To-One的关系,使用 hasOne 和 belongsTo建立连接;
要创建 One-To_Many的关系,使用 hasMany 和 belongsTo建立连接;
要创建 Many-To-Many的关系,使用两个 belongsToMany 建立连接。