Sequelize 中文API文檔

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

 2016年05月20日     35766     聲明


Sequelize類是引用sequlize模塊後獲取一個頂級對象,我們通過它來創建sequlize實例,也可以通過該對象來獲取模內其它對象的引用,如:Utils工具類、Transaction事務類等。創建實例後,可以通過實例來創建或定義Model(模型)、執行查詢、同步數據庫結構等操作。

  1. 快速入門
  2. Sequelize

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:[email protected]: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參數對象。

實例化參數

名稱 類型 說明
database String 數據庫名
[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] Boolean null值是否通過SQL查詢
[options.native=false] Boolean 是否使用本地庫,僅用於 postgres
[options.replication=false] Boolean 是否使用讀/寫複製(讀寫分離)。

要啓用讀/寫複製,需要傳遞一個對象,這個對象有readwrite兩個屬性。write是一個單一的對象(由單臺服務器處理寫入),而read是一個包含對象的數組(由多臺服務器處理讀取)。每臺readwrite服務器都可以包含以下屬性:hostportusernamepassworddatabase。 
讀寫分離的使用請參考: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類的實例化;也可以通過該對象來訪問模塊中子對象,如:DataTypesErrorsTransactions等。


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

參數

名稱 類型 說明
modelName String 模型名,在sequelize.models屬性中會使用這個名稱;如果沒有在options中指定表名,數據庫中也會使用此屬性做爲表名。
attributes Object 一個對象,其每個屬性對應表中的一個列,每個列可以使用一個預定義的DataType、字符串或類型描述對象定義:
attributes.column String | DataType | Object 數據庫中的列描述
attributes.column.type String | DataType DataType或字符串,表示列的數據類型
[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]
Boolean PostgreSQL 中在創建索引時不使用任務寫鎖定。僅 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] String MySQL中設置 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
})

參數

名稱 類型 說明
sql String  
[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 適用。

名稱 類型 說明
variables Object 包含多個變量的對象
options Object 查詢選項
options.transaction Transaction 是否在事務中執行查詢


2.36 sequelize.escape() - 編碼

sequelize.escape(value) -> String

對值value進行編碼並返回編碼結果。


2.37 sequelize.createSchema() - 創建數據庫 schema

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

創建一個新的數據庫 schema

參數

名稱 類型 說明
schema String schema 名
options Object 選項
options.logging Boolean | function 日誌打印函數


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

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

查詢數據庫中已定義的schema

參數

名稱 類型 說明
options Object 選項
options.logging Boolean | function 日誌打印函數


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

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

刪除數據庫中已定義指定名稱的schema

參數

名稱 類型 說明
schema String schema 名
options Object 選項
options.logging Boolean | function 日誌打印函數


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

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

刪除數據庫中所有已定義的schema

參數

名稱 類型 說明
options Object 選項
options.logging Boolean | 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()方法

參數

名稱 類型 說明
options Object 選項
options.transaction Boolean | function  
options.logging Boolean | function 日誌打印函數


2.43 sequelize.drop() - 刪除表

sequelize.drop(options) -> Promise

刪除所有已定義的模型所對應的表,這個操作實際上是調用每個模型的Model.drop()方法

參數

名稱 類型 說明
options Object 選項
options.logging Boolean | function 日誌打印函數


2.44 sequelize.authenticate() - 驗證連接

sequelize.authenticate() -> Promise

驗證已建立的連接

別名:validate


2.45 sequelize.fn() - 函數調用

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

創建於一個相當於數據庫函數的對象。該函數可用於搜索查詢的whereorder部分,以及做爲列定義的默認值。如果想在列中引用你定義的函數,就要使用sequelize.col,這樣列就能正確的解析,而不是解析爲字符串。

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

instance.updateAttributes({
  username: self.sequelize.fn('upper', self.sequelize.col('username'))
})
名稱 類型 說明
fn String 要調用的函數
args any 傳遞給調用函數的參數


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},可選的比較值,會生成 "<json path> = '<value>'"


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

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

指定屬性=條件。

屬性也可以從Model.rawAttributes對象獲取(如:Model.rawAttributes.idModel.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;

相關

參數

名稱 類型 說明
[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的函數
發佈了30 篇原創文章 · 獲贊 19 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章