阿夸漫谈

Sequelize入门指南 (1) —— 安装和创建

发表于 2019-01-30

Sequelize 是一个关系型数据库的 ORM 框架,基于 promise,适用于 Node.js v4 及更高的版本。目前支持的数据库有 PostgreSQL, MariaDB, MySQL, SQLite 和 MSSQL。

本文将对 Sequelize 的安装、数据库连接、模型定义和表的创建进行介绍。

1. 安装


进入项目,首先安装 Sequelize 模块以及相关依赖

$ npm install --save sequelize

// 根据数据库类型安装对应的包
$ npm install --save pg pg-hstore   // PostgreSQL
$ npm install --save mysql2         // MySQL
$ npm install --save mariadb        // MariaDB
$ npm install --save sqlite3        // SQLite
$ npm install --save tedious        // MSSQL

2 建立数据库连接


2.1 基本使用

安装 sequelize 模块后,获取 Sequelize 类。利用 Sequelize 类创建 Sequelize 的实例。实例化会默认生成一个连接池。

const Sequelize = require('sequelize');

// 生成 sequelize 实例并导出
module.exports = new Sequelize('database', 'username', 'password', {
    dialect: 'mysql',
    operatorsAliases: false,
    dialectOptions: {
      charset: 'utf8mb4',
      collate: 'utf8_general_ci',
      supportBigNumbers: true,
      bigNumberStrings: true
    },
    timezone: '+08:00'
  }
);

2.2 实例化参数

public constructor(database: String, username: String, password: String, options: Object)

名称 类型 属性 说明
database String 可选 数据库名称
username String 可选,默认值:null 数据库用户名
password String 可选,默认值:null 数据库密码
options Object 可选,默认值:{} 参数对象
options.host String 可选,默认值:localhost 关系数据库的主机
options.port Integer 可选,默认值:和数据库默认相同 关系数据库的端口
options.dialect String 可选 数据类型,有:mysql、postgres、sqlite、mssql、mariadb
options.dialectModulePath String 可选,默认值:null 指定数据库模块位置
options.dialectOptions Object 可选 数据库模块拓展参数
options.protocol String 可选,默认值:tcp 连接数据库的协议
options.define Object 可选,默认值:{} 定义全局表属性,可对比 3.2 中表配置
options.query Object 可选,默认值:{} sequelize.query 全局属性
options.set Object 可选,默认值:{} sequelize.set 全局属性
options.sync Object 可选,默认值:{} sequelize.sync 全局属性
options.timezone String 可选,默认值:’+00:00’ 时区
options.logging Function 可选,默认值:console.log 日志函数
options.benchmark Boolean 可选,默认值:false 是否传递执行完成所用的毫秒数,作为日志函数的第二个参数
options.omitNull Boolean 可选,默认值:false 空值是否查询
options.replication Boolean 可选,默认值:false 是否使用读写复制
options.pool Object 可选 连接池配置
options.pool.max Integer 可选,默认值:5 连接池最大连接数
options.pool.max Integer 可选,默认值:0 连接池最小连接数
options.pool.idle Integer 可选,默认值:10000 最长空置时间(毫秒),超时后释放连接
options.pool.acquire Integer 可选,默认值:10000 连接池尝试连接最长时间(毫秒),超过抛出异常
options.pool.evict Integer 可选,默认值:10000 清除超时连接,设置 0 禁止该功能
options.pool.validate Function 可选 连接验证函数
options.isolationLevel String 可选,默认值:和数据库默认相同 设置事件的隔离级别,详见 Sequelize.Transaction.ISOLATION_LEVELS
options.retry Object 可选 设置重试标志
options.retry.max Integer 可选 重试次数
options.typeValidation Boolean 可选,默认值:false 插入、更新时类型验证
options.operatorsAliases Object | Boolean 可选,默认值:true 别名设置

3. 定义模型


定义 Model,与数据库中的表结构对应,有两种方法:

3.1 Define 方法

const ArticleModel = sequelize.define(
  'article',
  {
    // 每个属性相当于表中的一个字段
    title: {
      type: Sequelize.STRING,
      allowNull: false,
      unique: true
    },
    content: {
      type: Sequelize.STRING,
      allowNull: false
    }
  }
);

3.2 配合 Import 方法

配合 Import 方法可以实现在单个文件中定义模型,并将模型导出。

// 默认接受 sequelize 实例、DataTypes 两个参数
module.exports = (sequelize, DataTypes) => {
  return sequelize.define(
    'article',
    {
      title: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: true
      },
      content: {
        type: Sequelize.STRING,
        allowNull: false
      }
    },
    createdAt: {
      type: DataTypes.DATE,
      get() {
        return moment(this.getDataValue('createdAt')).format('YYYY-MM-DD');
      }
    }
  )
}
// 引入定义的模型
const ArticleModel = sequelize.import('../model/article');

3.3 define 方法常用参数

public define(modelName: String, attributes: Object, options: Object): Model

名称 类型 属性 说明
modelName String 可选 模型名
attributes Object 表的列属性对象
attributes.column String | DataTypes | Object 列的描述
attributes.column.type String | DataTypes 列的数据类型,见 数据类型
attributes.column.allowNull Boolean 可选,默认值:true 非空约束
attributes.column.defaultValue any 可选,默认值:null 默认值
attributes.column.unique String | Boolean 可选,默认值:false 唯一约束
attributes.column.primaryKey Boolean 可选,默认值:false 主键
attributes.column.autoIncrement Boolean 可选,默认值:false 自增
attributes.column.comment String 可选,默认值:null 描述
attributes.column.references String | Model 可选,默认值:null 引用对象
attributes.column.onUpdate String 可选 更新时的操作,可选值:CASCADE、RESTRICT、SET DEFAULT、SET NULL、NO ACTION
attributes.column.onDelete String 可选 删除时的操作,可选值:ASCADE、RESTRICT、SET DEFAULT、SET NULL、NO ACTION
attributes.column.get Function 可选 获取值操作,使用 this.getDataValue(String, Value)
attributes.column.set Function 可选 设置值操作,使用 this.setDataValue(String, Value)
attributes.validate Object 可选 验证对象
options Object 覆盖 Sequelize 构造函数中 options.define 的值
options.defaultScope Object 可选,默认值:{} 模型默认搜索范围
options.scopes Object 可选 定义更多搜索范围,详见 Model.scope
options.omitNull Boolean 可选 是否不保存空值
options.timestamps Boolean 可选,默认值:true 添加 createdAt 和 updatedAt 两个时间戳字段
options.paranoid Boolean 可选,默认值:false 添加 deletedAt 字段,记录删除时间,不删除数据库条目,timestamps 为 true 时生效
options.underscored Boolean 可选,默认值:false 列名,true:采用驼峰命名;false:下划线命名
options.underscoredAll Boolean 可选,默认值:false 模型名,true:采用驼峰命名;false:下划线命名
options.freezeTableName Boolean 可选,默认值:false true:表名不自动修改;false:创建的表名称会变为复数
options.name Object 可选 模型关联时定义,对象包含 singular 和 plural 两个属性
options.name.singular String 可选
options.name.plural String 可选
options.createdAt String | Boolean 可选 设置为字符串,createdAt 列的列名为该字符串,设置为 flase 则不添加这个字段。timestamps 为 true 时候生效
options.updatedAt String | Boolean 可选 设置为字符串,updatedAt 列的列名为该字符串,设置为 flase 则不添加这个字段。timestamps 为 true 时候生效
ptions.deletedAt String | Boolean 可选 设置为字符串,deletedAt 列的列名为该字符串,设置为 flase 则不添加这个字段。paranoid 设置为 true 生效
options.tableName String 可选 表名。freezeTableName 设置为 true 生效
options.schema String 可选,默认值:’public’
options.engine String 可选
options.charset String 可选
options.comment String 可选
options.collate String 可选
options.hooks Object 可选 钩子函数对象
options.validate Object 可选 模型验证对象

4. 同步创建表


4.1 基本使用

同步模型到数据库,创建对应的表

ArticleModel.sync({force: false});

4.2 sync 方法参数

sequelize.sync(options);

名称 类型 属性 说明
options Object 可选,默认值:{}
options.force Boolean 可选,默认值:false 值 true 时创建表会删除原先的表
options.match RegExp 可选 创建匹配正则的表
options.logging Boolean|function 可选,默认值:console.log 日志打印函数
options.schema String 可选,默认值:’public’ 创建表的 schema,表配置可以覆盖
options.hooks Boolean 可选,默认值:true 钩子函数 beforeSync, afterSync, beforeBulkSync, afterBulkSync 将被调用
options.alter Boolean 可选,默认值:false 修改表结构,不建议生产使用

5. 总结


本文主要介绍了 Sequelize 的安装、模型定义和表的创建,下一篇将介绍如何通过 Sequelize 进行增删改查。

参考链接:http://docs.sequelizejs.com/

目录