轉(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)等操作。
2.1?new Sequelize()?- 實(shí)例化
2.2?new Sequelize()?- 通過URI實(shí)例化
2.3?sequelize.models?- 實(shí)例中已定義的模型
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.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.32?sequelize.isDefined()?- 檢查模型是否定義
2.33?sequelize.import()?- 模型導(dǎo)入
2.34?sequelize.query()?- 執(zhí)行查詢
2.35?sequelize.set()?- 設(shè)置變量
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.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.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í)例
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)
參數(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ù)