Sequelize ORM

739 阅读2分钟

前言

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 建立连接。