Sequelize 中文API文档-1. 快速入门、Sequelize类

转载 https://itbilu.com/nodejs/npm/VkYIaRPz-.html#induction-connection

Sequelize类是引用sequlize模块后获取一个顶级对象,我们通过它来创建sequlize实例,也可以通过该对象来获取模内其它对象的引用,如:Utils工具类、Transaction事务类等。创建实例后,可以通过实例来创建或定义Model(模型)、执行查询、同步数据库结构等操作。

快速入门

1.1 安装

1.2 建立连接

1.3 model定义

1.4 Promise

Sequelize类

2.1 new Sequelize() - 实例化

2.2 new Sequelize() - 通过URI实例化

2.3 sequelize.models - 实例中已定义的模型

2.4 sequelize.define() - 模型定义

2.5 Sequelize - 顶级对象

2.6 Utils - 工具类

2.7 Promise - Promise对象

2.8 QueryTypes - 查询类型枚举

2.9 Validator - validator.js对象

2.10 Transaction - 事务对象

2.11 Deferrable - 延时对象

2.12 Instance - 实例对象

2.13 Association - 联合关系对象

2.14 Error - 错误对象

2.15 ValidationError - 验证失败错误对象

2.16 DatabaseError - 数据库错误对象

2.17 TimeoutError - 查询超时错误对象

2.18 UniqueConstraintError - 唯一性错误对象

2.19 ExclusionConstraintError - 排出约束错误对象

2.20 ForeignKeyConstraintError - 外键约束错误对象

2.21 ConnectionError - 连接错误对象

2.22 ConnectionRefusedError - 连接拒绝错误对象

2.23 AccessDeniedError - 无访问权限错误对象

2.24 HostNotFoundError - 主机未找到错误对象

2.25 InvalidConnectionError - 无效链接错误对象

2.26 ConnectionTimedOutError - 链接超时错误对象

2.27 InstanceError - 实例错误对象

2.28 sequelize.getDialect() - 返回数据库类型

2.29 sequelize.getQueryInterface() - 返回QueryInterface实例

2.30 sequelize.define() - 模型定义

2.31 sequelize.model() - 获取模型

2.32 sequelize.isDefined() - 检查模型是否定义

2.33 sequelize.import() - 模型导入

2.34 sequelize.query() - 执行查询

2.35 sequelize.set() - 设置变量

2.36 sequelize.escape() - 编码

2.37 sequelize.createSchema() - 创建数据库 schema

2.38 sequelize.showAllSchemas() - 查询已定义的schema

2.39 sequelize.dropSchema() - 删除定义的schema

2.40 sequelize.dropAllSchemas() - 删除所有schema

2.41 sequelize.sync() - 同步模型到数据库

2.42 sequelize.truncate() - 截断已定义的表

2.43 sequelize.drop() - 删除表

2.44 sequelize.authenticate() - 验证连接

2.45 sequelize.fn() - 函数调用

2.46 sequelize.col() - 列对象

2.47 sequelize.cast() - cast函数

2.48 sequelize.literal() - 字面量对象

2.49 sequelize.and() - AND查询

2.50 sequelize.or() - OR查询

2.51 sequelize.json() - json嵌套对象

2.52 sequelize.where() - 指定WHERE条件

2.53 sequelize.transaction() - 启动事务

1. 快速入门

1.1 安装

Sequelize可以通过npm命令获取,除安装sequelize模块外还要安装所使用数据的驱动模块:

$ npm install --save sequelize

# 还需要安装以下之一:

$ npm install --save pg pg-hstore  // postgreSql

$ npm install --save mysql // mysql 或 mariadb

$ npm install --save sqlite3 

$ npm install --save tedious // MSSQL

1.2 建立连接

Sequelize会在初始化时设置一个连接池,这样你应该为每个数据库创建一个实例:

var sequelize = new Sequelize('database', 'username', 'password', {

  host: 'localhost',

  dialect: 'mysql'|'mariadb'|'sqlite'|'postgres'|'mssql',

  pool: {

    max: 5,

    min: 0,

    idle: 10000

  },

  // 仅 SQLite 适用

  storage: 'path/to/database.sqlite'

});

// 或者可以简单的使用一个连接 uri

var sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname');

1.3 model定义

model定义格式为sequelize.define('name', {attributes}, {options}):

var User = sequelize.define('user', {

  firstName: {

    type: Sequelize.STRING,

    field: 'first_name' // Will result in an attribute that is firstName when user facing but first_name in the database

  },

  lastName: {

    type: Sequelize.STRING

  }

}, {

  freezeTableName: true // Model 对应的表名将与model名相同

});

User.sync({force: true}).then(function () {

  // 已创建数据表

  return User.create({

    firstName: 'John',

    lastName: 'Hancock'

  });

});

1.4 Promise

Sequelize基于Promise实现异步流程控制,但其使用的并不是ECMAScript 6中规定的标准Promise对象,而是使用bluebird,这个模块是对原生Promise的一个扩展。

由于是基于Promise实现的流程控制,所以不能像下面这样获取查询值:

user = User.findOne()

console.log(user.get('firstName'));

user是一个promise对象而不是

2. Sequelize类

2.1 new Sequelize() - 实例化

new Sequelize(database, [username=null], [password=null], [options={}])

require引用后,会指向Sequelize的主类的构造函数,引用后就可以通过new关键字进行实例化,实例化后就会以连接池的形式连接到所使用的数据库。语法结构如下:

var Sequelize = require('sequelize');

var sequelize = new Sequelize(database, [username=null], [password=null], [options={}])

实例化Sequelize时,需要传入数据库名、用户名和密码,还可以传入一个可选的options参数对象。

实例化参数

名称类型说明

databaseString数据库名

[username=null]String数据库用户名

[password=null]String数据库密码

[options={}]Object参数对象

[options.dialect='mysql']String要连接的数据库类型。可选值有:mysql、postgres、sqlite、mariadb、mssql

[options.dialectModulePath=null]String指定后,将通过此路径模块加载数据库

[options.dialectOptions]Object路径模块所使用的扩展选项

[options.storage]String仅用于sqlite, 默认为':memory:'

[options.host='localhost']String连接数据库的主机

[options.port=]String连接数据库的端口

[options.protocol='tcp']String连接数据库使用的协议

[options.define={}]Object定义模型的选项,默认为'sequelize.define'选项

[options.query={}]Object'sequelize.query'的默认选项

[options.set={}]Object'sequelize.set'的默认选项

[options.sync={}]Object'sequelize.sync'的默认选项

[options.timezone='+00:00']String时间转换时从数据库得到的JavaScript时间。这个时区将应用于连接服务器的 NOW、CURRENT_TIMESTAMP或其它日期函数

[options.logging=console.log]Function用于Sequelize日志打印的函数

[options.omitNull=false]Booleannull值是否通过SQL查询

[options.native=false]Boolean是否使用本地库,仅用于 postgres

[options.replication=false]Boolean是否使用读/写复制(读写分离)。

要启用读/写复制,需要传递一个对象,这个对象有read、write两个属性。write是一个单一的对象(由单台服务器处理写入),而read是一个包含对象的数组(由多台服务器处理读取)。每台read、write服务器都可以包含以下属性:host、port、username、password、database。 

读写分离的使用请参考:Sequelize 实现数据库读写分离

[options.pool={}]Object使用连接池连接,默认为true

[options.pool.maxConnections]Integer

[options.pool.minConnections]Integer

[options.pool.maxIdleTime]Integer连接最大空置时间(毫秒),超时后将释放连接

[options.pool.validateConnection]Function连接验证函数

[options.quoteIdentifiers=true]Boolean设置为false时Postgres中会使表名和属性大小写不敏感,并跳过双引号

[options.transactionType='DEFERRED']String设置事务类型,详见Sequelize.Transaction.TYPES。仅Sqlite适用

[options.isolationLevel='REPEATABLE_READ']String设置事件的隔离级别,详见Sequelize.Transaction.ISOLATION_LEVELS

[options.retry]Object设置自动查询时的重试标志

[options.retry.match]Array匹配到指定的错误字符串之一后重试查询

[options.retry.max]Integer设置重试次数

[options.typeValidation=false]Boolean在插入、更新等操作时执行类型验证

[options.benchmark=false]Boolean在打印执行的SQL日志时输出执行时间(毫秒)

Sequelize实例化示例

// 不使用密码和选项

var sequelize = new Sequelize('database', 'username')

// 不使用选项

var sequelize = new Sequelize('database', 'username', 'password')

// 不使用密码/空密码

var sequelize = new Sequelize('database', 'username', null, {})

// 使用密码和选项

var sequelize = new Sequelize('my_database', 'john', 'doe', {})

Sequelize实例化(初始化)有以上几种形式,通过构造函数实例化后,就可以通过其返回的sequelize实例定义Model、执行query查询、执行transaction等。

2.2 new Sequelize() - 通过URI实例化

new Sequelize(uri, [options={}])

Sequelize可以通过一个URI进行实例化:

// 使用Uri连接

var sequelize = new Sequelize('mysql://localhost:3306/database', {})

2.3 sequelize.models - 实例中已定义的模型

sequelize.models

该实例属性用于返回通过sequelize.define定义的所有模型对象

sequelize.models;

// 返回值如下

{ User: User,

  UserRole: UserRole,

  …… }

2.4 sequelize.define() - 模型定义

sequelize.define(modelName, attributes, [options]) -> Modal

这个实例方法用于定义一个新Model(模型)。Model相当于数据库中的表,该对象不能通过构造函数实例化,而只能通过sequelize.define()或sequelize.import()方法创建。

表中的字段通过第二个参数对象attributes来定义,对象中的一个属性相当于表中的一个字段。

如,可以像下面这样定义一个表:

sequelize.define('modelName', {

    columnA: {

        type: Sequelize.BOOLEAN,

        validate: {

          is: ["[a-z]",'i'],        // will only allow letters

          max: 23,                  // only allow values <= 23

          isIn: {

            args: [['en', 'zh']],

            msg: "Must be English or Chinese"

          }

        },

        field: 'column_a'

        // Other attributes here

    },

    columnB: Sequelize.STRING,

    columnC: 'MY VERY OWN COLUMN TYPE'

})

sequelize.models.modelName // The model will now be available in models under the name given to define

2.5 Sequelize - 顶级对象

var Sequelize = require('sequelize');

Sequelize是一个指向sequelize模块顶级对象引用,同时也是一个构造函数。可以通过该构造函数进行Sequelize类的实例化;也可以通过该对象来访问模块中子对象,如:DataTypes、Errors、Transactions等。

2.6 Utils - 工具类

Sequelize.Utils

一个指定sequelize中工具类的引用,大多数情况下需要直接引用该对象,如:可以使用Sequelize.Utils._属性,该属性是一个指向lodash库的引用,如果你项目中没有另外引用该库就可以通过该属性来调用。

2.7 Promise - Promise对象

Sequelize.Promise

该属性是一个指向bluebirdPromise类型的引用。

2.8 QueryTypes - 查询类型枚举

Sequelize.QueryTypes

用于sequelize.query的表示查询类型的枚举对象。可用类型如下:

module.exports = {

  SELECT: 'SELECT',

  INSERT: 'INSERT',

  UPDATE: 'UPDATE',

  BULKUPDATE: 'BULKUPDATE',

  BULKDELETE: 'BULKDELETE',

  DELETE: 'DELETE',

  UPSERT: 'UPSERT',

  VERSION: 'VERSION',

  SHOWTABLES: 'SHOWTABLES',

  SHOWINDEXES: 'SHOWINDEXES',

  DESCRIBE: 'DESCRIBE',

  RAW: 'RAW',

  FOREIGNKEYS: 'FOREIGNKEYS',

};

2.9 Validator - validator.js对象

Sequelize.Validator

一个指定validator.js对象的引用,该对象用于Sequelize内部的验证,如:非常、URL、IP等,也可以通过该属性进行一些自定义验证。

2.10 Transaction - 事务对象

Sequelize.Transaction

该属性是一个指向SequelizeTransaction类的引用,要以使用这个属性来访问创建事务的隔离级别和事务类型等。

2.11 Deferrable - 延时对象

Sequelize.Deferrable

指向一个延时集合的引用,通过个属必可以访问不通的延时选项。

2.12 Instance - 实例对象

Sequelize.Instance

一个指定Sequelize实例类的引用。

2.13 Association - 联合关系对象

Sequelize.Association

一个指定Association类的引用。

2.14 Error - 错误对象

Sequelize.Error

Sequelize中生成错误的类

2.15 ValidationError - 验证失败错误对象

Sequelize.ValidationError

验证失败时会生成此对象

2.16 DatabaseError - 数据库错误对象

Sequelize.DatabaseError

验证失败时会生成此对象

指向一个所有数据库相关错误的类

2.17 TimeoutError - 查询超时错误对象

Sequelize.TimeoutError

当数据库查询超时时会生成TimeoutError对象。

2.18 UniqueConstraintError - 唯一性错误对象

Sequelize.UniqueConstraintError

当数违反唯一约束时会生成UniqueConstraintError对象。

2.19 ExclusionConstraintError - 排出约束错误对象

Sequelize.ExclusionConstraintError

在数据库中违反排除约束时触发此错误。

2.20 ForeignKeyConstraintError - 外键约束错误对象

Sequelize.ForeignKeyConstraintError

在数据库中违反外键约束时触发此错误。

2.21 ConnectionError - 连接错误对象

Sequelize.ConnectionError

一个指向数据库连接错误时触发的错误对象。

2.22 ConnectionRefusedError - 连接拒绝错误对象

Sequelize.ConnectionRefusedError

一个指向数据库连接被拒绝时触发的错误对象。

2.23 AccessDeniedError - 无访问权限错误对象

Sequelize.AccessDeniedError

连接到数据库但没有访问权限时会触发此错误。

2.24 HostNotFoundError - 主机未找到错误对象

Sequelize.HostNotFoundError

连接数据但主机名(IP或URI)未找到时会触发这个错误对象。

2.25 InvalidConnectionError - 无效链接错误对象

Sequelize.InvalidConnectionError

连接到数据库但其中的任意参数出现错误时会触发这个错误对象。

2.26 ConnectionTimedOutError - 链接超时错误对象

Sequelize.ConnectionTimedOutError

连接数据库超时时会触发这个错误对象。

2.27 InstanceError - 实例错误对象

Sequelize.InstanceError

当任何实例方法出现问题时会触发这个错误对象。

2.28 sequelize.getDialect() - 返回数据库类型

sequelize.getDialect()

该实例方法用于返回实例类型(数据库类型)

2.29 sequelize.getQueryInterface() - 返回QueryInterface实例

sequelize.getQueryInterface()

返回QueryInterface的实例

详见:queryInterface对象及功能

2.30 sequelize.define() - 模型定义

define(modelName, attributes, [options]) -> Model

定义一个模型,该模型是一个建立了与数据表关系的对象

被定义的表中的列在该方法的第二个参数中定义,可以理解为每个属性对应一个表的字段:

sequelize.define('modelName', {

    columnA: {

        type: Sequelize.BOOLEAN,

        validate: {

          is: ["[a-z]",'i'],        // will only allow letters

          max: 23,                  // only allow values <= 23

          isIn: {

            args: [['en', 'zh']],

            msg: "Must be English or Chinese"

          }

        },

        field: 'column_a'

        // Other attributes here

    },

    columnB: Sequelize.STRING,

    columnC: 'MY VERY OWN COLUMN TYPE'

})

sequelize.models.modelName // The model will now be available in models under the name given to define

如上所示,列的定义可以是字符串、一个预定义的Sequelize构造函数、或是一个对象。在定义列时,我们可以指定数据类型,也可以指定默认值、主键/外键等约束,还可以自定义访问器(getter)和设置器(setter)。

参数

名称类型说明

modelNameString模型名,在sequelize.models属性中会使用这个名称;如果没有在options中指定表名,数据库中也会使用此属性做为表名。

attributesObject一个对象,其每个属性对应表中的一个列,每个列可以使用一个预定义的DataType、字符串或类型描述对象定义:

attributes.columnString | DataType | Object数据库中的列描述

attributes.column.typeString | DataTypeDataType或字符串,表示列的数据类型

[attributes.column

.allowNull=true]

Boolean设置为false时,会给添加NOT NULL(非空)约束,数据保存时会进行非空验证

[attributes.column

.defaultValue=null]

Any字面默认值, JavaScript函数, 或一个 SQL 函数 (查看 sequelize.fn)

[attributes.column

.unique=false]

String | Boolean设置为true时,会为列添加唯一约束

[attributes.column

.primaryKey=false]

Boolean指定是否是主键

[attributes.column

.field=null]

String设置在数据库中的字段名。设置后会,Sequelize会将属性名映射到数据库中的不同名称

[attributes.column

.autoIncrement=false]

Boolean是否自增

[attributes.column

.comment=null]

String字段描述(自1.7+后,此描述不再添加到数据库中)

[attributes.column

.references=null]

String | Model引用对象

[attributes.column

.references.model]

String | Model如果列引用到另一个表,可以通过这个属性设置模型或字符串。

[attributes.column

.references.key='id']

String该列表示到表外键列的引用

[attributes.column.onUpdate]String当被引用的键更新时的操作,可选值是:CASCADE, RESTRICT, SET DEFAULT, SET NULL 或 NO ACTION 之一

[attributes.column.onDelete]String当被引用的键删除时的操作,可选值是:CASCADE, RESTRICT, SET DEFAULT, SET NULL 或 NO ACTION 之一

[attributes.column.get]Function为列自定义一个访问器。使用this.getDataValue(String)时调用的值

[attributes.column.set]Function为列自定义一个设置器。使用this.setDataValue(String, Value)时调用的值

[attributes.validate]Object模型每次保存时调用的验证对象。可是validator.js中的验证函数(参见 DAOValidator)、或自定义的验证函数。

[options]Object提供给Sequelize 构造函数的一些默认值

[options.defaultScope={}]Object定义使用此模型的默认搜索范围。作用范围与提供给 find / findAll 的选项形式相同

[options.scopes]Object更多范围,定义 defaultScope 的定义形式相同。关于限制范围的定义请参考Model.scope

[options.omitNull]Boolean是否忽略空值,这意味着,所有列的空值将不会被保存

[options.timestamps=true]Boolean为模型添加 createdAt 和 updatedAt 两个时间戳字段

[options.paranoid=false]Boolean使用逻辑删除。设置为true后,调用 destroy 方法时将不会删队模型,而是设置一个 deletedAt 列。此设置需要 timestamps=true

[options.underscored=false]Boolean转换列名的驼峰命名规则为下划线命令规则

[options.underscoredAll=false]Boolean转换模型名的驼峰命名规则为表名的下划线命令规则

[options.freezeTableName=false]Boolean设置为true时,sequelize不会改变表名,否则可能会按其规则有所调整

[options.name]Object允有singular 和 plural两个属性的对象,在模型与其它模型关联时使用

[options.name.singular=

inflection.singularize(modelName)]

String

[options.name.plural=

inflection.pluralize(modelName)]

String

[options.indexes]Array.<Object>要建立的索引

[options.indexes[].name]String索引名,默认为模型名 + '_' + 字段名

[options.indexes[].type]String索引类型,仅用于 mysql,其值为:UNIQUE、 FULLTEXT 或 SPATIAL之一

[options.indexes[].method]String创建索引的方法(SQL中的USING 声明)。BTREE 或 HASH 可以在 mysql 和 postgres中支持,postgres中支持,还支持 GIST 和 GIN

[options.indexes[].unique=false]Boolean设置索引是否唯一,设置后会自动触发UNIQUE设置

[options.indexes[]

.concurrently=false]

BooleanPostgreSQL 中在创建索引时不使用任务写锁定。仅 Postgres 适用

[options.indexes[].fields]Array.<String | Object>建立索引的字段数组。每个字段可以是一个字段名,sequelize 对象 (如 sequelize.fn),

或一个包含:attribute (字段名)、length (创建前缀字符数)、order (列排序方向)、collate (较验的字段集合 (排序))

[options.createdAt]String | Boolean如果为字符串,则使用提供的值代替 createdAt 列的默认名,设置为flase则不添加这个字段。

[options.updatedAt]String | Boolean如果为字符串,则使用提供的值代替 updatedAt 列的默认名,设置为flase则不添加这个字段

[options.deletedAt]String | Boolean如果为字符串,则使用提供的值代替 deletedAt 列的默认名,设置为flase则不添加这个字段

[options.tableName]String模型所对应表的表名,设置freezeTableName 为 true时,才会严格使用模型名

[options.getterMethods]Object提供给 getter 调用的方法,与每列定义的访问器一样。如果为列定义了一个相同名称的 getter 方法,那么会通过这个方法获取值;如果未定义的名称与列不匹配,这将做为一个虚拟访问器;也用于设置多个值,但不能用在。

[options.setterMethods]Object提供给 setter 调用的方法,与每列定义的设置器一样。如果为列定义了一个相同名称的 setter 方法,那么会通过这个方法设置值;如果未定义的名称与列不匹配,这将做为一个虚拟访设置;也用于匹配多个值,但不用于逻辑删除。

[options.instanceMethods]Object提供给每个实例(DAO)的方法。如果通过sequelize对方法进行了重写,可以通过"this.constructor.super_.prototype"来调用原方法,如:this.constructor.super_.prototype.toJSON.apply(this, arguments)

[options.classMethods]Object添加到Model的类方法,如果通过sequelize对方法进行了重写,可以通过 this.constructor.prototype来调用原方法,如:this.constructor.prototype.find.apply(this, arguments)

[options.schema='public']String

[options.engine]String

[options.charset]String

[options.comment]String

[options.collate]String

[options.initialAutoIncrement]StringMySQL中设置 AUTO_INCREMENT (自增)的初始值

[options.hooks]Object一个包含钩子函数的对象,这些函数会在生生命周期内某些事件发生之前或之后被调用。可添加的钩子函数有:beforeValidate, afterValidate, beforeBulkCreate, beforeBulkDestroy, beforeBulkUpdate, beforeCreate, beforeDestroy, beforeUpdate, afterCreate, afterDestroy, afterUpdate, afterBulkCreate, afterBulkDestory 和 afterBulkUpdate。每个属性可以是一个函数,或是一个包含一组函数的数组。

[options.validate]Object模型广泛验证对象。该验证会通过this。如果验证函数中有参数,则会被认为是异步的,并通过一个包含可选错误的回调函数形式的的调。

2.31 sequelize.model() - 获取模型

sequelize.model(modelName]) -> Model

获取一个已经定义的模型。modelName表示通过sequelize.define定义的模型名。

2.32 sequelize.isDefined() - 检查模型是否定义

sequelize.isDefined(modelName) -> Boolean

检查模型是否已经定义。modelName表示通过sequelize.define定义的模型名。

2.33 sequelize.import() - 模型导入

sequelize.import(path) -> Model

通过文件导入模型定义。检查模型是否已经定义。

被导入的模型会被缓存,所以多次导入并不会重复加载

path表示要导入文件的路径,如果使用相对路径会自动转换为绝对路径。

2.34 sequelize.query() - 执行查询

sequelize.query(sql, [options={}]) -> Promise

执行原始SQL 语句进行查询

默认情况下,返回值中有两个参数:一个包含结果的数组,一个元数据对象。可以通过.spread方法来查看结果。

如果不想使用原始查询结果,可以第二个可选参数中传一个type参数,并指定查询的类型。设置后,sequelize会对结果进行格式化:

sequelize.query('SELECT...').spread(function (results, metadata) {

  // Raw query - use spread

});

sequelize.query('SELECT...', { type: sequelize.QueryTypes.SELECT }).then(function (results) {

  // SELECT query - use then

})

参数

名称类型说明

sqlString

[options={}]Object查询选项

[options.raw]Boolean设置为true时,sequelize 不会查询结果进行格式化,或不会根据结果构建实例

[options.transaction=null]Transaction为查询指定事务

[options.type='RAW']String执行的查询类型,sequelize会根据这个类型对返回结果格式化。可以设置为一个字符串,或是通过Sequelize.QueryTypes来设置

[options.nest=false]Boolean设置为true,会使用dottie.js库,转换通过.设置的对象层级关系。如:{ 'user.username': 'john' } 会被转换为 { user: { username: 'john' }}。设置true后,查询类型如未明确指定,则使用'SELECT'

[options.plain=false]Boolean设置查询类型为 SELECT 并返回单行结果

[options.replacements]Object | Array替换:param格式的查询参数对象,或用于替换SQL中?符号的参数数组

[options.bind]Object | Array$param格式绑定参数的对象,或未命令绑定参数数组,会替换SQL中的$1, $2, ...

[options.useMaster=false]Boolean强制查询使用写池,而不管查询类型

[options.logging=false]Function一个用打印执行的SQL语句的函数

[options.instance]Instance用于sequelize 实例,用于从查询结果中构建实例

[options.model]Model用于sequelize 模型,用于从查询结果中构建实例

[options.retry]Object设置自动重试的控制标识对象

[options.retry.match]Array发生错误时,匹配到数组中的标识后自动重试

[options.retry.max]Integer设置最大重试次数

[options.searchPath=DEFAULT]String一个用于指定 schema 的 search_path 的可选项(仅 Postgres 适用)

[options.supportsSearchPath]Boolean是否使用 searchPath (仅 Postgres 适用)

[options.mapToModel=false]Object字段到模型的映射关系,当提供options.model 或 options.instance时。映射会在建立模型实例之前进行

[options.fieldMap]Object当为 SELECT查询时,映射字段与属性名

2.35 sequelize.set() - 设置变量

sequelize.set(variables, options) -> Promise

设置一个变量,设置后将会执行基于环境变量或用户变量的查询。此变量会在每次建立连接时设置,仅MySQL 适用。

名称类型说明

variablesObject包含多个变量的对象

optionsObject查询选项

options.transactionTransaction是否在事务中执行查询

2.36 sequelize.escape() - 编码

sequelize.escape(value) -> String

对值value进行编码并返回编码结果。

2.37 sequelize.createSchema() - 创建数据库 schema

sequelize.createSchema(schema, options={}) -> Promise

创建一个新的数据库 schema

参数

名称类型说明

schemaStringschema 名

optionsObject选项

options.loggingBoolean | function日志打印函数

2.38 sequelize.showAllSchemas() - 查询已定义的schema

sequelize.showAllSchemas(options={}) -> Promise

查询数据库中已定义的schema

参数

名称类型说明

optionsObject选项

options.loggingBoolean | function日志打印函数

2.39 sequelize.dropSchema() - 删除定义的schema

sequelize.dropSchema(schema, options={}) -> Promise

删除数据库中已定义指定名称的schema

参数

名称类型说明

schemaStringschema 名

optionsObject选项

options.loggingBoolean | function日志打印函数

2.40 sequelize.dropAllSchemas() - 删除所有schema

sequelize.dropAllSchemas(options={}) -> Promise

删除数据库中所有已定义的schema

参数

名称类型说明

optionsObject选项

options.loggingBoolean | function日志打印函数

2.41 sequelize.sync() - 同步模型到数据库

sequelize.sync([options={}]) -> Promise

同步所有已定义的模型到数据库中

参数

名称类型说明

[options={}]Object

[options.force=false]Boolean设置为 true,会在创建表前先删除原表,即:DROP TABLE IF EXISTS ...

[options.match]RegEx添加匹配规则,只重建匹配的表,在force: true时非常有用

[options.logging=console.log]Boolean | function执行SQL的日志打印函数

[options.schema='public']String创建表的 schema 。这一选项可以每个表的 sequelize.define中重写

[options.searchPath=DEFAULT]String一个用于指定 schema 的 search_path 的可选项(仅 Postgres 适用)

[options.hooks=true]Boolean设置为true时,会调用同步相关的钩子函数:beforeSync、afterSync、beforBulkSync、afterBulkSync

2.42 sequelize.truncate() - 截断已定义的表

sequelize.truncate([options]) -> Promise

截断所有已定义的模型所对应的表,这个操作实际上是调用每个模型的Model.truncate()方法

参数

名称类型说明

optionsObject选项

options.transactionBoolean | function

options.loggingBoolean | function日志打印函数

2.43 sequelize.drop() - 删除表

sequelize.drop(options) -> Promise

删除所有已定义的模型所对应的表,这个操作实际上是调用每个模型的Model.drop()方法

参数

名称类型说明

optionsObject选项

options.loggingBoolean | function日志打印函数

2.44 sequelize.authenticate() - 验证连接

sequelize.authenticate() -> Promise

验证已建立的连接

别名:validate

2.45 sequelize.fn() - 函数调用

sequelize.fn(fn, args) -> Sequelize.fn

创建于一个相当于数据库函数的对象。该函数可用于搜索查询的where和order部分,以及做为列定义的默认值。如果想在列中引用你定义的函数,就要使用sequelize.col,这样列就能正确的解析,而不是解析为字符串。

如,将username字段值解析为大写形式:

instance.updateAttributes({

  username: self.sequelize.fn('upper', self.sequelize.col('username'))

})

名称类型说明

fnString要调用的函数

argsany传递给调用函数的参数

2.46 sequelize.col() - 列对象

col(col) -> Sequelize.col

创建一个相当于数据库列的对象。这个方法经常结合sequelize.fn使用,它可以保证将列名正确的传递给该方法,而不是经过转义。

col-表示列名

2.47 sequelize.cast() - cast函数

cast(val, type) -> Sequelize.cast

创建一个表示cast函数调用的对象

val-{any},cast的值

type-{String},cast类型

2.48 sequelize.literal() - 字面量对象

literal(val) -> Sequelize.literal

创建一个字面量对象,该值不会转义

别名:asIs

更多关于sequelize.literal()的使用请参考:

字段值批量自增、自减

2.49 sequelize.and() - AND查询

and(args) -> Sequelize.and

AND查询

val-{String | Object},会被AND连接的参数

2.50 sequelize.or() - OR查询

or(args) -> Sequelize.or

OR查询

val-{String | Object},会被OR连接的参数

2.51 sequelize.json() - json嵌套对象

json(conditions, [value]) -> Sequelize.json

生成一个Postgre中json类型的嵌套对象

conditions-{String | Object},一个能够被postgres json 语法解析以的嵌套对象

[value]-{String | Object},可选的比较值,会生成 " = ''"

2.52 sequelize.where() - 指定WHERE条件

json(conditions, [value]) -> Sequelize.json

指定属性=条件。

属性也可以从Model.rawAttributes对象获取(如:Model.rawAttributes.id、Model.rawAttributes.name)。属性应该已在模型中定义。也可以从sequelize工具函数中获取(如:sequelize.fn,、sequelize.col

当使用字符串属性是,用于{ where: { attr: something }}语法。如果不希望属性被转义,请使用sequelize.literal。

attr-{Object},属性

[comparator='=']-{String}

logic-{String | Object},限制条件可以是简单字符串或进一步的条件对象(如:$or、$and、.litera)

别名:condition

2.53 sequelize.transaction() - 启动事务

sequlize.transaction([options={}]) -> Promise

启动一个事务。当使用事务时,需要将事务做为一个可选参数transaction传入,然后查询就会在传入的事务下执行:

sequelize.transaction().then(function (t) {

  return User.find(..., { transaction: t}).then(function (user) {

    return user.updateAttributes(..., { transaction: t});

  })

  .then(t.commit.bind(t))

  .catch(t.rollback.bind(t));

})

事务支持自动提交或回滚,当使用promise链接调用时会自动完成:

sequelize.transaction(function (t) {

  // 注意,这时使用的是callback而不是promise.then()

  return User.find(..., { transaction: t}).then(function (user) {

    return user.updateAttributes(..., { transaction: t});

  });

}).then(function () {

  // Committed

}).catch(function (err) {

  // Rolled back

  console.error(err);

});

启用CLS命名空间时,事务分被自动挂载。

var cls = require('continuation-local-storage'),

    ns = cls.createNamespace('....');

var Sequelize = require('sequelize');

Sequelize.cls = ns;

相关

Transaction

参数

名称类型说明

[options={}]Object

[options.autocommit=true]Boolean是否自动提交

[options.type='DEFERRED']String查看Sequelize.Transaction.TYPES,仅 Sqlite 适用

[options.isolationLevel

='REPEATABLE_READ']

String事务的隔离级别,参见Sequelize.Transaction.ISOLATION_LEVELS

[options.logging=false]Function用于打印执行SQL的函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容