Sequelize 中文API文檔-1. 快速入門、Sequelize類

轉(zhuǎn)載?https://itbilu.com/nodejs/npm/VkYIaRPz-.html#induction-connection

Sequelize類是引用sequlize模塊后獲取一個(gè)頂級(jí)對(duì)象,我們通過它來創(chuàng)建sequlize實(shí)例,也可以通過該對(duì)象來獲取模內(nèi)其它對(duì)象的引用,如:Utils工具類、Transaction事務(wù)類等。創(chuàng)建實(shí)例后,可以通過實(shí)例來創(chuàng)建或定義Model(模型)、執(zhí)行查詢、同步數(shù)據(jù)庫結(jié)構(gòu)等操作。

快速入門

1.1 安裝

1.2 建立連接

1.3?model定義

1.4?Promise

Sequelize類

2.1?new Sequelize()?- 實(shí)例化

2.2?new Sequelize()?- 通過URI實(shí)例化

2.3?sequelize.models?- 實(shí)例中已定義的模型

2.4?sequelize.define()?- 模型定義

2.5?Sequelize?- 頂級(jí)對(duì)象

2.6?Utils?- 工具類

2.7?Promise?- Promise對(duì)象

2.8?QueryTypes?- 查詢類型枚舉

2.9?Validator?-?validator.js對(duì)象

2.10?Transaction?- 事務(wù)對(duì)象

2.11?Deferrable?- 延時(shí)對(duì)象

2.12?Instance?- 實(shí)例對(duì)象

2.13?Association?- 聯(lián)合關(guān)系對(duì)象

2.14?Error?- 錯(cuò)誤對(duì)象

2.15?ValidationError?- 驗(yàn)證失敗錯(cuò)誤對(duì)象

2.16?DatabaseError?- 數(shù)據(jù)庫錯(cuò)誤對(duì)象

2.17?TimeoutError?- 查詢超時(shí)錯(cuò)誤對(duì)象

2.18?UniqueConstraintError?- 唯一性錯(cuò)誤對(duì)象

2.19?ExclusionConstraintError?- 排出約束錯(cuò)誤對(duì)象

2.20?ForeignKeyConstraintError?- 外鍵約束錯(cuò)誤對(duì)象

2.21?ConnectionError?- 連接錯(cuò)誤對(duì)象

2.22?ConnectionRefusedError?- 連接拒絕錯(cuò)誤對(duì)象

2.23?AccessDeniedError?- 無訪問權(quán)限錯(cuò)誤對(duì)象

2.24?HostNotFoundError?- 主機(jī)未找到錯(cuò)誤對(duì)象

2.25?InvalidConnectionError?- 無效鏈接錯(cuò)誤對(duì)象

2.26?ConnectionTimedOutError?- 鏈接超時(shí)錯(cuò)誤對(duì)象

2.27?InstanceError?- 實(shí)例錯(cuò)誤對(duì)象

2.28?sequelize.getDialect()?- 返回?cái)?shù)據(jù)庫類型

2.29?sequelize.getQueryInterface()?- 返回QueryInterface實(shí)例

2.30?sequelize.define()?- 模型定義

2.31?sequelize.model()?- 獲取模型

2.32?sequelize.isDefined()?- 檢查模型是否定義

2.33?sequelize.import()?- 模型導(dǎo)入

2.34?sequelize.query()?- 執(zhí)行查詢

2.35?sequelize.set()?- 設(shè)置變量

2.36?sequelize.escape()?- 編碼

2.37?sequelize.createSchema()?- 創(chuàng)建數(shù)據(jù)庫 schema

2.38?sequelize.showAllSchemas()?- 查詢已定義的schema

2.39?sequelize.dropSchema()?- 刪除定義的schema

2.40?sequelize.dropAllSchemas()?- 刪除所有schema

2.41?sequelize.sync()?- 同步模型到數(shù)據(jù)庫

2.42?sequelize.truncate()?- 截?cái)嘁讯x的表

2.43?sequelize.drop()?- 刪除表

2.44?sequelize.authenticate()?- 驗(yàn)證連接

2.45?sequelize.fn()?- 函數(shù)調(diào)用

2.46?sequelize.col()?- 列對(duì)象

2.47?sequelize.cast()?- cast函數(shù)

2.48?sequelize.literal()?- 字面量對(duì)象

2.49?sequelize.and()?- AND查詢

2.50?sequelize.or()?- OR查詢

2.51?sequelize.json()?- json嵌套對(duì)象

2.52?sequelize.where()?- 指定WHERE條件

2.53?sequelize.transaction()?- 啟動(dòng)事務(wù)

1. 快速入門

1.1 安裝

Sequelize可以通過npm命令獲取,除安裝sequelize模塊外還要安裝所使用數(shù)據(jù)的驅(qū)動(dòng)模塊:

$ 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會(huì)在初始化時(shí)設(shè)置一個(gè)連接池,這樣你應(yīng)該為每個(gè)數(shù)據(jù)庫創(chuàng)建一個(gè)實(shí)例:

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'

});

// 或者可以簡單的使用一個(gè)連接 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 對(duì)應(yīng)的表名將與model名相同

});

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

? // 已創(chuàng)建數(shù)據(jù)表

? return User.create({

? ? firstName: 'John',

? ? lastName: 'Hancock'

? });

});

1.4?Promise

Sequelize基于Promise實(shí)現(xiàn)異步流程控制,但其使用的并不是ECMAScript 6中規(guī)定的標(biāo)準(zhǔn)Promise對(duì)象,而是使用bluebird,這個(gè)模塊是對(duì)原生Promise的一個(gè)擴(kuò)展。

由于是基于Promise實(shí)現(xiàn)的流程控制,所以不能像下面這樣獲取查詢值:

user = User.findOne()

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

user是一個(gè)promise對(duì)象而不是

2.?Sequelize類

2.1?new Sequelize()?- 實(shí)例化

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

require引用后,會(huì)指向Sequelize的主類的構(gòu)造函數(shù),引用后就可以通過new關(guān)鍵字進(jìn)行實(shí)例化,實(shí)例化后就會(huì)以連接池的形式連接到所使用的數(shù)據(jù)庫。語法結(jié)構(gòu)如下:

var Sequelize = require('sequelize');

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

實(shí)例化Sequelize時(shí),需要傳入數(shù)據(jù)庫名、用戶名和密碼,還可以傳入一個(gè)可選的options參數(shù)對(duì)象。

實(shí)例化參數(shù)

名稱類型說明

databaseString數(shù)據(jù)庫名

[username=null]String數(shù)據(jù)庫用戶名

[password=null]String數(shù)據(jù)庫密碼

[options={}]Object參數(shù)對(duì)象

[options.dialect='mysql']String要連接的數(shù)據(jù)庫類型??蛇x值有:mysql、postgres、sqlite、mariadb、mssql

[options.dialectModulePath=null]String指定后,將通過此路徑模塊加載數(shù)據(jù)庫

[options.dialectOptions]Object路徑模塊所使用的擴(kuò)展選項(xiàng)

[options.storage]String僅用于sqlite, 默認(rèn)為':memory:'

[options.host='localhost']String連接數(shù)據(jù)庫的主機(jī)

[options.port=]String連接數(shù)據(jù)庫的端口

[options.protocol='tcp']String連接數(shù)據(jù)庫使用的協(xié)議

[options.define={}]Object定義模型的選項(xiàng),默認(rèn)為'sequelize.define'選項(xiàng)

[options.query={}]Object'sequelize.query'的默認(rèn)選項(xiàng)

[options.set={}]Object'sequelize.set'的默認(rèn)選項(xiàng)

[options.sync={}]Object'sequelize.sync'的默認(rèn)選項(xiàng)

[options.timezone='+00:00']String時(shí)間轉(zhuǎn)換時(shí)從數(shù)據(jù)庫得到的JavaScript時(shí)間。這個(gè)時(shí)區(qū)將應(yīng)用于連接服務(wù)器的 NOW、CURRENT_TIMESTAMP或其它日期函數(shù)

[options.logging=console.log]Function用于Sequelize日志打印的函數(shù)

[options.omitNull=false]Booleannull值是否通過SQL查詢

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

[options.replication=false]Boolean是否使用讀/寫復(fù)制(讀寫分離)。

要啟用讀/寫復(fù)制,需要傳遞一個(gè)對(duì)象,這個(gè)對(duì)象有read、write兩個(gè)屬性。write是一個(gè)單一的對(duì)象(由單臺(tái)服務(wù)器處理寫入),而read是一個(gè)包含對(duì)象的數(shù)組(由多臺(tái)服務(wù)器處理讀取)。每臺(tái)read、write服務(wù)器都可以包含以下屬性:host、port、username、password、database。?

讀寫分離的使用請(qǐng)參考:Sequelize 實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離

[options.pool={}]Object使用連接池連接,默認(rèn)為true

[options.pool.maxConnections]Integer

[options.pool.minConnections]Integer

[options.pool.maxIdleTime]Integer連接最大空置時(shí)間(毫秒),超時(shí)后將釋放連接

[options.pool.validateConnection]Function連接驗(yàn)證函數(shù)

[options.quoteIdentifiers=true]Boolean設(shè)置為false時(shí)Postgres中會(huì)使表名和屬性大小寫不敏感,并跳過雙引號(hào)

[options.transactionType='DEFERRED']String設(shè)置事務(wù)類型,詳見Sequelize.Transaction.TYPES。僅Sqlite適用

[options.isolationLevel='REPEATABLE_READ']String設(shè)置事件的隔離級(jí)別,詳見Sequelize.Transaction.ISOLATION_LEVELS

[options.retry]Object設(shè)置自動(dòng)查詢時(shí)的重試標(biāo)志

[options.retry.match]Array匹配到指定的錯(cuò)誤字符串之一后重試查詢

[options.retry.max]Integer設(shè)置重試次數(shù)

[options.typeValidation=false]Boolean在插入、更新等操作時(shí)執(zhí)行類型驗(yàn)證

[options.benchmark=false]Boolean在打印執(zhí)行的SQL日志時(shí)輸出執(zhí)行時(shí)間(毫秒)

Sequelize實(shí)例化示例

// 不使用密碼和選項(xiàng)

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

// 不使用選項(xiàng)

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

// 不使用密碼/空密碼

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

// 使用密碼和選項(xiàng)

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

Sequelize實(shí)例化(初始化)有以上幾種形式,通過構(gòu)造函數(shù)實(shí)例化后,就可以通過其返回的sequelize實(shí)例定義Model、執(zhí)行query查詢、執(zhí)行transaction等。

2.2?new Sequelize()?- 通過URI實(shí)例化

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

Sequelize可以通過一個(gè)URI進(jìn)行實(shí)例化:

// 使用Uri連接

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

2.3?sequelize.models?- 實(shí)例中已定義的模型

sequelize.models

該實(shí)例屬性用于返回通過sequelize.define定義的所有模型對(duì)象

sequelize.models;

// 返回值如下

{ User: User,

? UserRole: UserRole,

? …… }

2.4?sequelize.define()?- 模型定義

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

這個(gè)實(shí)例方法用于定義一個(gè)新Model(模型)。Model相當(dāng)于數(shù)據(jù)庫中的表,該對(duì)象不能通過構(gòu)造函數(shù)實(shí)例化,而只能通過sequelize.define()或sequelize.import()方法創(chuàng)建。

表中的字段通過第二個(gè)參數(shù)對(duì)象attributes來定義,對(duì)象中的一個(gè)屬性相當(dāng)于表中的一個(gè)字段。

如,可以像下面這樣定義一個(gè)表:

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?- 頂級(jí)對(duì)象

var Sequelize = require('sequelize');

Sequelize是一個(gè)指向sequelize模塊頂級(jí)對(duì)象引用,同時(shí)也是一個(gè)構(gòu)造函數(shù)。可以通過該構(gòu)造函數(shù)進(jìn)行Sequelize類的實(shí)例化;也可以通過該對(duì)象來訪問模塊中子對(duì)象,如:DataTypes、Errors、Transactions等。

2.6?Utils?- 工具類

Sequelize.Utils

一個(gè)指定sequelize中工具類的引用,大多數(shù)情況下需要直接引用該對(duì)象,如:可以使用Sequelize.Utils._屬性,該屬性是一個(gè)指向lodash庫的引用,如果你項(xiàng)目中沒有另外引用該庫就可以通過該屬性來調(diào)用。

2.7?Promise?- Promise對(duì)象

Sequelize.Promise

該屬性是一個(gè)指向bluebirdPromise類型的引用。

2.8?QueryTypes?- 查詢類型枚舉

Sequelize.QueryTypes

用于sequelize.query的表示查詢類型的枚舉對(duì)象。可用類型如下:

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對(duì)象

Sequelize.Validator

一個(gè)指定validator.js對(duì)象的引用,該對(duì)象用于Sequelize內(nèi)部的驗(yàn)證,如:非常、URL、IP等,也可以通過該屬性進(jìn)行一些自定義驗(yàn)證。

2.10?Transaction?- 事務(wù)對(duì)象

Sequelize.Transaction

該屬性是一個(gè)指向SequelizeTransaction類的引用,要以使用這個(gè)屬性來訪問創(chuàng)建事務(wù)的隔離級(jí)別和事務(wù)類型等。

2.11?Deferrable?- 延時(shí)對(duì)象

Sequelize.Deferrable

指向一個(gè)延時(shí)集合的引用,通過個(gè)屬必可以訪問不通的延時(shí)選項(xiàng)。

2.12?Instance?- 實(shí)例對(duì)象

Sequelize.Instance

一個(gè)指定Sequelize實(shí)例類的引用。

2.13?Association?- 聯(lián)合關(guān)系對(duì)象

Sequelize.Association

一個(gè)指定Association類的引用。

2.14?Error?- 錯(cuò)誤對(duì)象

Sequelize.Error

Sequelize中生成錯(cuò)誤的類

2.15?ValidationError?- 驗(yàn)證失敗錯(cuò)誤對(duì)象

Sequelize.ValidationError

驗(yàn)證失敗時(shí)會(huì)生成此對(duì)象

2.16?DatabaseError?- 數(shù)據(jù)庫錯(cuò)誤對(duì)象

Sequelize.DatabaseError

驗(yàn)證失敗時(shí)會(huì)生成此對(duì)象

指向一個(gè)所有數(shù)據(jù)庫相關(guān)錯(cuò)誤的類

2.17?TimeoutError?- 查詢超時(shí)錯(cuò)誤對(duì)象

Sequelize.TimeoutError

當(dāng)數(shù)據(jù)庫查詢超時(shí)時(shí)會(huì)生成TimeoutError對(duì)象。

2.18?UniqueConstraintError?- 唯一性錯(cuò)誤對(duì)象

Sequelize.UniqueConstraintError

當(dāng)數(shù)違反唯一約束時(shí)會(huì)生成UniqueConstraintError對(duì)象。

2.19?ExclusionConstraintError?- 排出約束錯(cuò)誤對(duì)象

Sequelize.ExclusionConstraintError

在數(shù)據(jù)庫中違反排除約束時(shí)觸發(fā)此錯(cuò)誤。

2.20?ForeignKeyConstraintError?- 外鍵約束錯(cuò)誤對(duì)象

Sequelize.ForeignKeyConstraintError

在數(shù)據(jù)庫中違反外鍵約束時(shí)觸發(fā)此錯(cuò)誤。

2.21?ConnectionError?- 連接錯(cuò)誤對(duì)象

Sequelize.ConnectionError

一個(gè)指向數(shù)據(jù)庫連接錯(cuò)誤時(shí)觸發(fā)的錯(cuò)誤對(duì)象。

2.22?ConnectionRefusedError?- 連接拒絕錯(cuò)誤對(duì)象

Sequelize.ConnectionRefusedError

一個(gè)指向數(shù)據(jù)庫連接被拒絕時(shí)觸發(fā)的錯(cuò)誤對(duì)象。

2.23?AccessDeniedError?- 無訪問權(quán)限錯(cuò)誤對(duì)象

Sequelize.AccessDeniedError

連接到數(shù)據(jù)庫但沒有訪問權(quán)限時(shí)會(huì)觸發(fā)此錯(cuò)誤。

2.24?HostNotFoundError?- 主機(jī)未找到錯(cuò)誤對(duì)象

Sequelize.HostNotFoundError

連接數(shù)據(jù)但主機(jī)名(IP或URI)未找到時(shí)會(huì)觸發(fā)這個(gè)錯(cuò)誤對(duì)象。

2.25?InvalidConnectionError?- 無效鏈接錯(cuò)誤對(duì)象

Sequelize.InvalidConnectionError

連接到數(shù)據(jù)庫但其中的任意參數(shù)出現(xiàn)錯(cuò)誤時(shí)會(huì)觸發(fā)這個(gè)錯(cuò)誤對(duì)象。

2.26?ConnectionTimedOutError?- 鏈接超時(shí)錯(cuò)誤對(duì)象

Sequelize.ConnectionTimedOutError

連接數(shù)據(jù)庫超時(shí)時(shí)會(huì)觸發(fā)這個(gè)錯(cuò)誤對(duì)象。

2.27?InstanceError?- 實(shí)例錯(cuò)誤對(duì)象

Sequelize.InstanceError

當(dāng)任何實(shí)例方法出現(xiàn)問題時(shí)會(huì)觸發(fā)這個(gè)錯(cuò)誤對(duì)象。

2.28?sequelize.getDialect()?- 返回?cái)?shù)據(jù)庫類型

sequelize.getDialect()

該實(shí)例方法用于返回實(shí)例類型(數(shù)據(jù)庫類型)

2.29?sequelize.getQueryInterface()?- 返回QueryInterface實(shí)例

sequelize.getQueryInterface()

返回QueryInterface的實(shí)例

詳見:queryInterface對(duì)象及功能

2.30?sequelize.define()?- 模型定義

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

定義一個(gè)模型,該模型是一個(gè)建立了與數(shù)據(jù)表關(guān)系的對(duì)象

被定義的表中的列在該方法的第二個(gè)參數(shù)中定義,可以理解為每個(gè)屬性對(duì)應(yīng)一個(gè)表的字段:

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

如上所示,列的定義可以是字符串、一個(gè)預(yù)定義的Sequelize構(gòu)造函數(shù)、或是一個(gè)對(duì)象。在定義列時(shí),我們可以指定數(shù)據(jù)類型,也可以指定默認(rèn)值、主鍵/外鍵等約束,還可以自定義訪問器(getter)和設(shè)置器(setter)。

參數(shù)

名稱類型說明

modelNameString模型名,在sequelize.models屬性中會(huì)使用這個(gè)名稱;如果沒有在options中指定表名,數(shù)據(jù)庫中也會(huì)使用此屬性做為表名。

attributesObject一個(gè)對(duì)象,其每個(gè)屬性對(duì)應(yīng)表中的一個(gè)列,每個(gè)列可以使用一個(gè)預(yù)定義的DataType、字符串或類型描述對(duì)象定義:

attributes.columnString | DataType | Object數(shù)據(jù)庫中的列描述

attributes.column.typeString | DataTypeDataType或字符串,表示列的數(shù)據(jù)類型

[attributes.column

.allowNull=true]

Boolean設(shè)置為false時(shí),會(huì)給添加NOT NULL(非空)約束,數(shù)據(jù)保存時(shí)會(huì)進(jìn)行非空驗(yàn)證

[attributes.column

.defaultValue=null]

Any字面默認(rèn)值, JavaScript函數(shù), 或一個(gè) SQL 函數(shù) (查看?sequelize.fn)

[attributes.column

.unique=false]

String | Boolean設(shè)置為true時(shí),會(huì)為列添加唯一約束

[attributes.column

.primaryKey=false]

Boolean指定是否是主鍵

[attributes.column

.field=null]

String設(shè)置在數(shù)據(jù)庫中的字段名。設(shè)置后會(huì),Sequelize會(huì)將屬性名映射到數(shù)據(jù)庫中的不同名稱

[attributes.column

.autoIncrement=false]

Boolean是否自增

[attributes.column

.comment=null]

String字段描述(自1.7+后,此描述不再添加到數(shù)據(jù)庫中)

[attributes.column

.references=null]

String | Model引用對(duì)象

[attributes.column

.references.model]

String | Model如果列引用到另一個(gè)表,可以通過這個(gè)屬性設(shè)置模型或字符串。

[attributes.column

.references.key='id']

String該列表示到表外鍵列的引用

[attributes.column.onUpdate]String當(dāng)被引用的鍵更新時(shí)的操作,可選值是:CASCADE, RESTRICT, SET DEFAULT, SET NULL 或 NO ACTION 之一

[attributes.column.onDelete]String當(dāng)被引用的鍵刪除時(shí)的操作,可選值是:CASCADE, RESTRICT, SET DEFAULT, SET NULL 或 NO ACTION 之一

[attributes.column.get]Function為列自定義一個(gè)訪問器。使用this.getDataValue(String)時(shí)調(diào)用的值

[attributes.column.set]Function為列自定義一個(gè)設(shè)置器。使用this.setDataValue(String, Value)時(shí)調(diào)用的值

[attributes.validate]Object模型每次保存時(shí)調(diào)用的驗(yàn)證對(duì)象。可是validator.js中的驗(yàn)證函數(shù)(參見?DAOValidator)、或自定義的驗(yàn)證函數(shù)。

[options]Object提供給Sequelize 構(gòu)造函數(shù)的一些默認(rèn)值

[options.defaultScope={}]Object定義使用此模型的默認(rèn)搜索范圍。作用范圍與提供給 find / findAll 的選項(xiàng)形式相同

[options.scopes]Object更多范圍,定義 defaultScope 的定義形式相同。關(guān)于限制范圍的定義請(qǐng)參考Model.scope

[options.omitNull]Boolean是否忽略空值,這意味著,所有列的空值將不會(huì)被保存

[options.timestamps=true]Boolean為模型添加 createdAt 和 updatedAt 兩個(gè)時(shí)間戳字段

[options.paranoid=false]Boolean使用邏輯刪除。設(shè)置為true后,調(diào)用?destroy?方法時(shí)將不會(huì)刪隊(duì)模型,而是設(shè)置一個(gè)?deletedAt?列。此設(shè)置需要?timestamps=true

[options.underscored=false]Boolean轉(zhuǎn)換列名的駝峰命名規(guī)則為下劃線命令規(guī)則

[options.underscoredAll=false]Boolean轉(zhuǎn)換模型名的駝峰命名規(guī)則為表名的下劃線命令規(guī)則

[options.freezeTableName=false]Boolean設(shè)置為true時(shí),sequelize不會(huì)改變表名,否則可能會(huì)按其規(guī)則有所調(diào)整

[options.name]Object允有singular?和?plural兩個(gè)屬性的對(duì)象,在模型與其它模型關(guān)聯(lián)時(shí)使用

[options.name.singular=

inflection.singularize(modelName)]

String

[options.name.plural=

inflection.pluralize(modelName)]

String

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

[options.indexes[].name]String索引名,默認(rèn)為模型名 + '_' + 字段名

[options.indexes[].type]String索引類型,僅用于 mysql,其值為:UNIQUE、?FULLTEXT?或?SPATIAL之一

[options.indexes[].method]String創(chuàng)建索引的方法(SQL中的USING?聲明)。BTREE 或 HASH 可以在 mysql 和 postgres中支持,postgres中支持,還支持 GIST 和 GIN

[options.indexes[].unique=false]Boolean設(shè)置索引是否唯一,設(shè)置后會(huì)自動(dòng)觸發(fā)UNIQUE設(shè)置

[options.indexes[]

.concurrently=false]

BooleanPostgreSQL 中在創(chuàng)建索引時(shí)不使用任務(wù)寫鎖定。僅 Postgres 適用

[options.indexes[].fields]Array.<String | Object>建立索引的字段數(shù)組。每個(gè)字段可以是一個(gè)字段名,sequelize 對(duì)象 (如?sequelize.fn),

或一個(gè)包含:attribute?(字段名)、length?(創(chuàng)建前綴字符數(shù))、order?(列排序方向)、collate?(較驗(yàn)的字段集合 (排序))

[options.createdAt]String | Boolean如果為字符串,則使用提供的值代替 createdAt 列的默認(rèn)名,設(shè)置為flase則不添加這個(gè)字段。

[options.updatedAt]String | Boolean如果為字符串,則使用提供的值代替 updatedAt 列的默認(rèn)名,設(shè)置為flase則不添加這個(gè)字段

[options.deletedAt]String | Boolean如果為字符串,則使用提供的值代替 deletedAt 列的默認(rèn)名,設(shè)置為flase則不添加這個(gè)字段

[options.tableName]String模型所對(duì)應(yīng)表的表名,設(shè)置freezeTableName 為 true時(shí),才會(huì)嚴(yán)格使用模型名

[options.getterMethods]Object提供給 getter 調(diào)用的方法,與每列定義的訪問器一樣。如果為列定義了一個(gè)相同名稱的 getter 方法,那么會(huì)通過這個(gè)方法獲取值;如果未定義的名稱與列不匹配,這將做為一個(gè)虛擬訪問器;也用于設(shè)置多個(gè)值,但不能用在。

[options.setterMethods]Object提供給 setter 調(diào)用的方法,與每列定義的設(shè)置器一樣。如果為列定義了一個(gè)相同名稱的 setter 方法,那么會(huì)通過這個(gè)方法設(shè)置值;如果未定義的名稱與列不匹配,這將做為一個(gè)虛擬訪設(shè)置;也用于匹配多個(gè)值,但不用于邏輯刪除。

[options.instanceMethods]Object提供給每個(gè)實(shí)例(DAO)的方法。如果通過sequelize對(duì)方法進(jìn)行了重寫,可以通過"this.constructor.super_.prototype"來調(diào)用原方法,如:this.constructor.super_.prototype.toJSON.apply(this, arguments)

[options.classMethods]Object添加到Model的類方法,如果通過sequelize對(duì)方法進(jìn)行了重寫,可以通過?this.constructor.prototype來調(diào)用原方法,如: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中設(shè)置 AUTO_INCREMENT (自增)的初始值

[options.hooks]Object一個(gè)包含鉤子函數(shù)的對(duì)象,這些函數(shù)會(huì)在生生命周期內(nèi)某些事件發(fā)生之前或之后被調(diào)用??商砑拥你^子函數(shù)有:beforeValidate, afterValidate, beforeBulkCreate, beforeBulkDestroy, beforeBulkUpdate, beforeCreate, beforeDestroy, beforeUpdate, afterCreate, afterDestroy, afterUpdate, afterBulkCreate, afterBulkDestory 和 afterBulkUpdate。每個(gè)屬性可以是一個(gè)函數(shù),或是一個(gè)包含一組函數(shù)的數(shù)組。

[options.validate]Object模型廣泛驗(yàn)證對(duì)象。該驗(yàn)證會(huì)通過this。如果驗(yàn)證函數(shù)中有參數(shù),則會(huì)被認(rèn)為是異步的,并通過一個(gè)包含可選錯(cuò)誤的回調(diào)函數(shù)形式的的調(diào)。

2.31?sequelize.model()?- 獲取模型

sequelize.model(modelName]) -> Model

獲取一個(gè)已經(jīng)定義的模型。modelName表示通過sequelize.define定義的模型名。

2.32?sequelize.isDefined()?- 檢查模型是否定義

sequelize.isDefined(modelName) -> Boolean

檢查模型是否已經(jīng)定義。modelName表示通過sequelize.define定義的模型名。

2.33?sequelize.import()?- 模型導(dǎo)入

sequelize.import(path) -> Model

通過文件導(dǎo)入模型定義。檢查模型是否已經(jīng)定義。

被導(dǎo)入的模型會(huì)被緩存,所以多次導(dǎo)入并不會(huì)重復(fù)加載

path表示要導(dǎo)入文件的路徑,如果使用相對(duì)路徑會(huì)自動(dòng)轉(zhuǎn)換為絕對(duì)路徑。

2.34?sequelize.query()?- 執(zhí)行查詢

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

執(zhí)行原始SQL 語句進(jìn)行查詢

默認(rèn)情況下,返回值中有兩個(gè)參數(shù):一個(gè)包含結(jié)果的數(shù)組,一個(gè)元數(shù)據(jù)對(duì)象??梢酝ㄟ^.spread方法來查看結(jié)果。

如果不想使用原始查詢結(jié)果,可以第二個(gè)可選參數(shù)中傳一個(gè)type參數(shù),并指定查詢的類型。設(shè)置后,sequelize會(huì)對(duì)結(jié)果進(jìn)行格式化:

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

})

參數(shù)

名稱類型說明

sqlString

[options={}]Object查詢選項(xiàng)

[options.raw]Boolean設(shè)置為true時(shí),sequelize 不會(huì)查詢結(jié)果進(jìn)行格式化,或不會(huì)根據(jù)結(jié)果構(gòu)建實(shí)例

[options.transaction=null]Transaction為查詢指定事務(wù)

[options.type='RAW']String執(zhí)行的查詢類型,sequelize會(huì)根據(jù)這個(gè)類型對(duì)返回結(jié)果格式化??梢栽O(shè)置為一個(gè)字符串,或是通過Sequelize.QueryTypes來設(shè)置

[options.nest=false]Boolean設(shè)置為true,會(huì)使用dottie.js庫,轉(zhuǎn)換通過.設(shè)置的對(duì)象層級(jí)關(guān)系。如:{ 'user.username': 'john' }?會(huì)被轉(zhuǎn)換為?{ user: { username: 'john' }}。設(shè)置true后,查詢類型如未明確指定,則使用'SELECT'

[options.plain=false]Boolean設(shè)置查詢類型為?SELECT?并返回單行結(jié)果

[options.replacements]Object | Array替換:param格式的查詢參數(shù)對(duì)象,或用于替換SQL中?符號(hào)的參數(shù)數(shù)組

[options.bind]Object | Array$param格式綁定參數(shù)的對(duì)象,或未命令綁定參數(shù)數(shù)組,會(huì)替換SQL中的$1, $2, ...

[options.useMaster=false]Boolean強(qiáng)制查詢使用寫池,而不管查詢類型

[options.logging=false]Function一個(gè)用打印執(zhí)行的SQL語句的函數(shù)

[options.instance]Instance用于sequelize 實(shí)例,用于從查詢結(jié)果中構(gòu)建實(shí)例

[options.model]Model用于sequelize 模型,用于從查詢結(jié)果中構(gòu)建實(shí)例

[options.retry]Object設(shè)置自動(dòng)重試的控制標(biāo)識(shí)對(duì)象

[options.retry.match]Array發(fā)生錯(cuò)誤時(shí),匹配到數(shù)組中的標(biāo)識(shí)后自動(dòng)重試

[options.retry.max]Integer設(shè)置最大重試次數(shù)

[options.searchPath=DEFAULT]String一個(gè)用于指定 schema 的 search_path 的可選項(xiàng)(僅 Postgres 適用)

[options.supportsSearchPath]Boolean是否使用 searchPath (僅 Postgres 適用)

[options.mapToModel=false]Object字段到模型的映射關(guān)系,當(dāng)提供options.model?或?options.instance時(shí)。映射會(huì)在建立模型實(shí)例之前進(jìn)行

[options.fieldMap]Object當(dāng)為?SELECT查詢時(shí),映射字段與屬性名

2.35?sequelize.set()?- 設(shè)置變量

sequelize.set(variables, options) -> Promise

設(shè)置一個(gè)變量,設(shè)置后將會(huì)執(zhí)行基于環(huán)境變量或用戶變量的查詢。此變量會(huì)在每次建立連接時(shí)設(shè)置,僅MySQL 適用。

名稱類型說明

variablesObject包含多個(gè)變量的對(duì)象

optionsObject查詢選項(xiàng)

options.transactionTransaction是否在事務(wù)中執(zhí)行查詢

2.36?sequelize.escape()?- 編碼

sequelize.escape(value) -> String

對(duì)值value進(jìn)行編碼并返回編碼結(jié)果。

2.37?sequelize.createSchema()?- 創(chuàng)建數(shù)據(jù)庫 schema

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

創(chuàng)建一個(gè)新的數(shù)據(jù)庫 schema

參數(shù)

名稱類型說明

schemaStringschema 名

optionsObject選項(xiàng)

options.loggingBoolean | function日志打印函數(shù)

2.38?sequelize.showAllSchemas()?- 查詢已定義的schema

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

查詢數(shù)據(jù)庫中已定義的schema

參數(shù)

名稱類型說明

optionsObject選項(xiàng)

options.loggingBoolean | function日志打印函數(shù)

2.39?sequelize.dropSchema()?- 刪除定義的schema

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

刪除數(shù)據(jù)庫中已定義指定名稱的schema

參數(shù)

名稱類型說明

schemaStringschema 名

optionsObject選項(xiàng)

options.loggingBoolean | function日志打印函數(shù)

2.40?sequelize.dropAllSchemas()?- 刪除所有schema

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

刪除數(shù)據(jù)庫中所有已定義的schema

參數(shù)

名稱類型說明

optionsObject選項(xiàng)

options.loggingBoolean | function日志打印函數(shù)

2.41?sequelize.sync()?- 同步模型到數(shù)據(jù)庫

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

同步所有已定義的模型到數(shù)據(jù)庫中

參數(shù)

名稱類型說明

[options={}]Object

[options.force=false]Boolean設(shè)置為 true,會(huì)在創(chuàng)建表前先刪除原表,即:DROP TABLE IF EXISTS ...

[options.match]RegEx添加匹配規(guī)則,只重建匹配的表,在force: true時(shí)非常有用

[options.logging=console.log]Boolean | function執(zhí)行SQL的日志打印函數(shù)

[options.schema='public']String創(chuàng)建表的 schema 。這一選項(xiàng)可以每個(gè)表的?sequelize.define中重寫

[options.searchPath=DEFAULT]String一個(gè)用于指定 schema 的 search_path 的可選項(xiàng)(僅 Postgres 適用)

[options.hooks=true]Boolean設(shè)置為true時(shí),會(huì)調(diào)用同步相關(guān)的鉤子函數(shù):beforeSync、afterSync、beforBulkSync、afterBulkSync

2.42?sequelize.truncate()?- 截?cái)嘁讯x的表

sequelize.truncate([options]) -> Promise

截?cái)嗨幸讯x的模型所對(duì)應(yīng)的表,這個(gè)操作實(shí)際上是調(diào)用每個(gè)模型的Model.truncate()方法

參數(shù)

名稱類型說明

optionsObject選項(xiàng)

options.transactionBoolean | function

options.loggingBoolean | function日志打印函數(shù)

2.43?sequelize.drop()?- 刪除表

sequelize.drop(options) -> Promise

刪除所有已定義的模型所對(duì)應(yīng)的表,這個(gè)操作實(shí)際上是調(diào)用每個(gè)模型的Model.drop()方法

參數(shù)

名稱類型說明

optionsObject選項(xiàng)

options.loggingBoolean | function日志打印函數(shù)

2.44?sequelize.authenticate()?- 驗(yàn)證連接

sequelize.authenticate() -> Promise

驗(yàn)證已建立的連接

別名:validate

2.45?sequelize.fn()?- 函數(shù)調(diào)用

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

創(chuàng)建于一個(gè)相當(dāng)于數(shù)據(jù)庫函數(shù)的對(duì)象。該函數(shù)可用于搜索查詢的where和order部分,以及做為列定義的默認(rèn)值。如果想在列中引用你定義的函數(shù),就要使用sequelize.col,這樣列就能正確的解析,而不是解析為字符串。

如,將username字段值解析為大寫形式:

instance.updateAttributes({

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

})

名稱類型說明

fnString要調(diào)用的函數(shù)

argsany傳遞給調(diào)用函數(shù)的參數(shù)

2.46?sequelize.col()?- 列對(duì)象

col(col) -> Sequelize.col

創(chuàng)建一個(gè)相當(dāng)于數(shù)據(jù)庫列的對(duì)象。這個(gè)方法經(jīng)常結(jié)合sequelize.fn使用,它可以保證將列名正確的傳遞給該方法,而不是經(jīng)過轉(zhuǎn)義。

col-表示列名

2.47?sequelize.cast()?- cast函數(shù)

cast(val, type) -> Sequelize.cast

創(chuàng)建一個(gè)表示cast函數(shù)調(diào)用的對(duì)象

val-{any},cast的值

type-{String},cast類型

2.48?sequelize.literal()?- 字面量對(duì)象

literal(val) -> Sequelize.literal

創(chuàng)建一個(gè)字面量對(duì)象,該值不會(huì)轉(zhuǎn)義

別名:asIs

更多關(guān)于sequelize.literal()的使用請(qǐng)參考:

字段值批量自增、自減

2.49?sequelize.and()?- AND查詢

and(args) -> Sequelize.and

AND查詢

val-{String | Object},會(huì)被AND連接的參數(shù)

2.50?sequelize.or()?- OR查詢

or(args) -> Sequelize.or

OR查詢

val-{String | Object},會(huì)被OR連接的參數(shù)

2.51?sequelize.json()?- json嵌套對(duì)象

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

生成一個(gè)Postgre中json類型的嵌套對(duì)象

conditions-{String | Object},一個(gè)能夠被postgres json 語法解析以的嵌套對(duì)象

[value]-{String | Object},可選的比較值,會(huì)生成 " = ''"

2.52?sequelize.where()?- 指定WHERE條件

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

指定屬性=條件。

屬性也可以從Model.rawAttributes對(duì)象獲?。ㄈ纾篗odel.rawAttributes.id、Model.rawAttributes.name)。屬性應(yīng)該已在模型中定義。也可以從sequelize工具函數(shù)中獲?。ㄈ纾簊equelize.fn,、sequelize.col

當(dāng)使用字符串屬性是,用于{ where: { attr: something }}語法。如果不希望屬性被轉(zhuǎn)義,請(qǐng)使用sequelize.literal。

attr-{Object},屬性

[comparator='=']-{String}

logic-{String | Object},限制條件可以是簡單字符串或進(jìn)一步的條件對(duì)象(如:$or、$and、.litera)

別名:condition

2.53?sequelize.transaction()?- 啟動(dòng)事務(wù)

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

啟動(dòng)一個(gè)事務(wù)。當(dāng)使用事務(wù)時(shí),需要將事務(wù)做為一個(gè)可選參數(shù)transaction傳入,然后查詢就會(huì)在傳入的事務(wù)下執(zhí)行:

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));

})

事務(wù)支持自動(dòng)提交或回滾,當(dāng)使用promise鏈接調(diào)用時(shí)會(huì)自動(dòng)完成:

sequelize.transaction(function (t) {

? // 注意,這時(shí)使用的是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命名空間時(shí),事務(wù)分被自動(dòng)掛載。

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

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

var Sequelize = require('sequelize');

Sequelize.cls = ns;

相關(guān)

Transaction

參數(shù)

名稱類型說明

[options={}]Object

[options.autocommit=true]Boolean是否自動(dòng)提交

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

[options.isolationLevel

='REPEATABLE_READ']

String事務(wù)的隔離級(jí)別,參見Sequelize.Transaction.ISOLATION_LEVELS

[options.logging=false]Function用于打印執(zhí)行SQL的函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容