轉(zhuǎn)載?https://itbilu.com/nodejs/npm/VkYIaRPz-.html#induction-connection
Sequelize類是引用sequlize模塊后獲取一個(gè)頂級(jí)對(duì)象,我們通過(guò)它來(lái)創(chuàng)建sequlize實(shí)例险胰,也可以通過(guò)該對(duì)象來(lái)獲取模內(nèi)其它對(duì)象的引用岳服,如:Utils工具類、Transaction事務(wù)類等吆视。創(chuàng)建實(shí)例后典挑,可以通過(guò)實(shí)例來(lái)創(chuàng)建或定義Model(模型)、執(zhí)行查詢啦吧、同步數(shù)據(jù)庫(kù)結(jié)構(gòu)等操作您觉。
2.1?new Sequelize()?- 實(shí)例化
2.2?new Sequelize()?- 通過(guò)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ù)庫(kù)錯(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?- 無(wú)訪問(wèn)權(quán)限錯(cuò)誤對(duì)象
2.24?HostNotFoundError?- 主機(jī)未找到錯(cuò)誤對(duì)象
2.25?InvalidConnectionError?- 無(wú)效鏈接錯(cuò)誤對(duì)象
2.26?ConnectionTimedOutError?- 鏈接超時(shí)錯(cuò)誤對(duì)象
2.27?InstanceError?- 實(shí)例錯(cuò)誤對(duì)象
2.28?sequelize.getDialect()?- 返回?cái)?shù)據(jù)庫(kù)類型
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ù)庫(kù) schema
2.38?sequelize.showAllSchemas()?- 查詢已定義的schema
2.39?sequelize.dropSchema()?- 刪除定義的schema
2.40?sequelize.dropAllSchemas()?- 刪除所有schema
2.41?sequelize.sync()?- 同步模型到數(shù)據(jù)庫(kù)
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可以通過(guò)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ù)庫(kù)創(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'
});
// 或者可以簡(jiǎn)單的使用一個(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ù)私沮,引用后就可以通過(guò)new關(guān)鍵字進(jìn)行實(shí)例化,實(shí)例化后就會(huì)以連接池的形式連接到所使用的數(shù)據(jù)庫(kù)和橙。語(yǔ)法結(jié)構(gòu)如下:
var Sequelize = require('sequelize');
var sequelize = new Sequelize(database, [username=null], [password=null], [options={}])
實(shí)例化Sequelize時(shí)仔燕,需要傳入數(shù)據(jù)庫(kù)名、用戶名和密碼魔招,還可以傳入一個(gè)可選的options參數(shù)對(duì)象晰搀。
實(shí)例化參數(shù)
名稱類型說(shuō)明
databaseString數(shù)據(jù)庫(kù)名
[username=null]String數(shù)據(jù)庫(kù)用戶名
[password=null]String數(shù)據(jù)庫(kù)密碼
[options={}]Object參數(shù)對(duì)象
[options.dialect='mysql']String要連接的數(shù)據(jù)庫(kù)類型“彀撸可選值有:mysql厕隧、postgres、sqlite俄周、mariadb吁讨、mssql
[options.dialectModulePath=null]String指定后,將通過(guò)此路徑模塊加載數(shù)據(jù)庫(kù)
[options.dialectOptions]Object路徑模塊所使用的擴(kuò)展選項(xiàng)
[options.storage]String僅用于sqlite峦朗, 默認(rèn)為':memory:'
[options.host='localhost']String連接數(shù)據(jù)庫(kù)的主機(jī)
[options.port=]String連接數(shù)據(jù)庫(kù)的端口
[options.protocol='tcp']String連接數(shù)據(jù)庫(kù)使用的協(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ù)庫(kù)得到的JavaScript時(shí)間。這個(gè)時(shí)區(qū)將應(yīng)用于連接服務(wù)器的 NOW波势、CURRENT_TIMESTAMP或其它日期函數(shù)
[options.logging=console.log]Function用于Sequelize日志打印的函數(shù)
[options.omitNull=false]Booleannull值是否通過(guò)SQL查詢
[options.native=false]Boolean是否使用本地庫(kù)翎朱,僅用于 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ù)庫(kù)讀寫分離
[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ì)使表名和屬性大小寫不敏感,并跳過(guò)雙引號(hào)
[options.transactionType='DEFERRED']String設(shè)置事務(wù)類型著蛙,詳見(jiàn)Sequelize.Transaction.TYPES删铃。僅Sqlite適用
[options.isolationLevel='REPEATABLE_READ']String設(shè)置事件的隔離級(jí)別,詳見(jiàn)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í)例化(初始化)有以上幾種形式泳姐,通過(guò)構(gòu)造函數(shù)實(shí)例化后,就可以通過(guò)其返回的sequelize實(shí)例定義Model暂吉、執(zhí)行query查詢胖秒、執(zhí)行transaction等。
2.2?new Sequelize()?- 通過(guò)URI實(shí)例化
new Sequelize(uri, [options={}])
Sequelize可以通過(guò)一個(gè)URI進(jìn)行實(shí)例化:
// 使用Uri連接
var sequelize = new Sequelize('mysql://localhost:3306/database', {})
2.3?sequelize.models?- 實(shí)例中已定義的模型
sequelize.models
該實(shí)例屬性用于返回通過(guò)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ù)庫(kù)中的表阎肝,該對(duì)象不能通過(guò)構(gòu)造函數(shù)實(shí)例化,而只能通過(guò)sequelize.define()或sequelize.import()方法創(chuàng)建肮街。
表中的字段通過(guò)第二個(gè)參數(shù)對(duì)象attributes來(lái)定義风题,對(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ù)眼刃。可以通過(guò)該構(gòu)造函數(shù)進(jìn)行Sequelize類的實(shí)例化摇肌;也可以通過(guò)該對(duì)象來(lái)訪問(wèn)模塊中子對(duì)象擂红,如:DataTypes、Errors围小、Transactions等昵骤。
2.6?Utils?- 工具類
Sequelize.Utils
一個(gè)指定sequelize中工具類的引用,大多數(shù)情況下需要直接引用該對(duì)象肯适,如:可以使用Sequelize.Utils._屬性变秦,該屬性是一個(gè)指向lodash庫(kù)的引用,如果你項(xiàng)目中沒(méi)有另外引用該庫(kù)就可以通過(guò)該屬性來(lái)調(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等,也可以通過(guò)該屬性進(jìn)行一些自定義驗(yàn)證移斩。
2.10?Transaction?- 事務(wù)對(duì)象
Sequelize.Transaction
該屬性是一個(gè)指向SequelizeTransaction類的引用肚医,要以使用這個(gè)屬性來(lái)訪問(wèn)創(chuàng)建事務(wù)的隔離級(jí)別和事務(wù)類型等。
2.11?Deferrable?- 延時(shí)對(duì)象
Sequelize.Deferrable
指向一個(gè)延時(shí)集合的引用向瓷,通過(guò)個(gè)屬必可以訪問(wèn)不通的延時(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ù)庫(kù)錯(cuò)誤對(duì)象
Sequelize.DatabaseError
驗(yàn)證失敗時(shí)會(huì)生成此對(duì)象
指向一個(gè)所有數(shù)據(jù)庫(kù)相關(guān)錯(cuò)誤的類
2.17?TimeoutError?- 查詢超時(shí)錯(cuò)誤對(duì)象
Sequelize.TimeoutError
當(dāng)數(shù)據(jù)庫(kù)查詢超時(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ù)庫(kù)中違反排除約束時(shí)觸發(fā)此錯(cuò)誤朱躺。
2.20?ForeignKeyConstraintError?- 外鍵約束錯(cuò)誤對(duì)象
Sequelize.ForeignKeyConstraintError
在數(shù)據(jù)庫(kù)中違反外鍵約束時(shí)觸發(fā)此錯(cuò)誤刁赖。
2.21?ConnectionError?- 連接錯(cuò)誤對(duì)象
Sequelize.ConnectionError
一個(gè)指向數(shù)據(jù)庫(kù)連接錯(cuò)誤時(shí)觸發(fā)的錯(cuò)誤對(duì)象。
2.22?ConnectionRefusedError?- 連接拒絕錯(cuò)誤對(duì)象
Sequelize.ConnectionRefusedError
一個(gè)指向數(shù)據(jù)庫(kù)連接被拒絕時(shí)觸發(fā)的錯(cuò)誤對(duì)象长搀。
2.23?AccessDeniedError?- 無(wú)訪問(wèn)權(quán)限錯(cuò)誤對(duì)象
Sequelize.AccessDeniedError
連接到數(shù)據(jù)庫(kù)但沒(méi)有訪問(wèn)權(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?- 無(wú)效鏈接錯(cuò)誤對(duì)象
Sequelize.InvalidConnectionError
連接到數(shù)據(jù)庫(kù)但其中的任意參數(shù)出現(xiàn)錯(cuò)誤時(shí)會(huì)觸發(fā)這個(gè)錯(cuò)誤對(duì)象源请。
2.26?ConnectionTimedOutError?- 鏈接超時(shí)錯(cuò)誤對(duì)象
Sequelize.ConnectionTimedOutError
連接數(shù)據(jù)庫(kù)超時(shí)時(shí)會(huì)觸發(fā)這個(gè)錯(cuò)誤對(duì)象枪芒。
2.27?InstanceError?- 實(shí)例錯(cuò)誤對(duì)象
Sequelize.InstanceError
當(dāng)任何實(shí)例方法出現(xiàn)問(wèn)題時(shí)會(huì)觸發(fā)這個(gè)錯(cuò)誤對(duì)象。
2.28?sequelize.getDialect()?- 返回?cái)?shù)據(jù)庫(kù)類型
sequelize.getDialect()
該實(shí)例方法用于返回實(shí)例類型(數(shù)據(jù)庫(kù)類型)
2.29?sequelize.getQueryInterface()?- 返回QueryInterface實(shí)例
sequelize.getQueryInterface()
返回QueryInterface的實(shí)例
詳見(jiàn):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)值瞒斩、主鍵/外鍵等約束破婆,還可以自定義訪問(wèn)器(getter)和設(shè)置器(setter)。
參數(shù)
名稱類型說(shuō)明
modelNameString模型名胸囱,在sequelize.models屬性中會(huì)使用這個(gè)名稱祷舀;如果沒(méi)有在options中指定表名,數(shù)據(jù)庫(kù)中也會(huì)使用此屬性做為表名烹笔。
attributesObject一個(gè)對(duì)象裳扯,其每個(gè)屬性對(duì)應(yīng)表中的一個(gè)列,每個(gè)列可以使用一個(gè)預(yù)定義的DataType谤职、字符串或類型描述對(duì)象定義:
attributes.columnString | DataType | Object數(shù)據(jù)庫(kù)中的列描述
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ù)庫(kù)中的字段名。設(shè)置后會(huì)饶套,Sequelize會(huì)將屬性名映射到數(shù)據(jù)庫(kù)中的不同名稱
[attributes.column
.autoIncrement=false]
Boolean是否自增
[attributes.column
.comment=null]
String字段描述(自1.7+后漩蟆,此描述不再添加到數(shù)據(jù)庫(kù)中)
[attributes.column
.references=null]
String | Model引用對(duì)象
[attributes.column
.references.model]
String | Model如果列引用到另一個(gè)表,可以通過(guò)這個(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è)訪問(wèn)器蛤克。使用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ù)(參見(jiàn)?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)用的方法,與每列定義的訪問(wèn)器一樣果善。如果為列定義了一個(gè)相同名稱的 getter 方法诊笤,那么會(huì)通過(guò)這個(gè)方法獲取值;如果未定義的名稱與列不匹配巾陕,這將做為一個(gè)虛擬訪問(wèn)器讨跟;也用于設(shè)置多個(gè)值纪他,但不能用在。
[options.setterMethods]Object提供給 setter 調(diào)用的方法晾匠,與每列定義的設(shè)置器一樣茶袒。如果為列定義了一個(gè)相同名稱的 setter 方法,那么會(huì)通過(guò)這個(gè)方法設(shè)置值凉馆;如果未定義的名稱與列不匹配薪寓,這將做為一個(gè)虛擬訪設(shè)置;也用于匹配多個(gè)值澜共,但不用于邏輯刪除向叉。
[options.instanceMethods]Object提供給每個(gè)實(shí)例(DAO)的方法。如果通過(guò)sequelize對(duì)方法進(jìn)行了重寫咳胃,可以通過(guò)"this.constructor.super_.prototype"來(lái)調(diào)用原方法植康,如:this.constructor.super_.prototype.toJSON.apply(this, arguments)
[options.classMethods]Object添加到Model的類方法,如果通過(guò)sequelize對(duì)方法進(jìn)行了重寫展懈,可以通過(guò)?this.constructor.prototype來(lái)調(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ì)通過(guò)this供搀。如果驗(yàn)證函數(shù)中有參數(shù),則會(huì)被認(rèn)為是異步的钠至,并通過(guò)一個(gè)包含可選錯(cuò)誤的回調(diào)函數(shù)形式的的調(diào)葛虐。
2.31?sequelize.model()?- 獲取模型
sequelize.model(modelName]) -> Model
獲取一個(gè)已經(jīng)定義的模型。modelName表示通過(guò)sequelize.define定義的模型名棉钧。
2.32?sequelize.isDefined()?- 檢查模型是否定義
sequelize.isDefined(modelName) -> Boolean
檢查模型是否已經(jīng)定義屿脐。modelName表示通過(guò)sequelize.define定義的模型名。
2.33?sequelize.import()?- 模型導(dǎo)入
sequelize.import(path) -> Model
通過(guò)文件導(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 語(yǔ)句進(jìn)行查詢
默認(rèn)情況下,返回值中有兩個(gè)參數(shù):一個(gè)包含結(jié)果的數(shù)組休溶,一個(gè)元數(shù)據(jù)對(duì)象代赁∪潘可以通過(guò).spread方法來(lái)查看結(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ù)
名稱類型說(shuō)明
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é)果格式化狐蜕。可以設(shè)置為一個(gè)字符串卸夕,或是通過(guò)Sequelize.QueryTypes來(lái)設(shè)置
[options.nest=false]Boolean設(shè)置為true层释,會(huì)使用dottie.js庫(kù),轉(zhuǎn)換通過(guò).設(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語(yǔ)句的函數(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 適用尊残。
名稱類型說(shuō)明
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ù)庫(kù) schema
sequelize.createSchema(schema, options={}) -> Promise
創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù) schema
參數(shù)
名稱類型說(shuō)明
schemaStringschema 名
optionsObject選項(xiàng)
options.loggingBoolean | function日志打印函數(shù)
2.38?sequelize.showAllSchemas()?- 查詢已定義的schema
sequelize.showAllSchemas(options={}) -> Promise
查詢數(shù)據(jù)庫(kù)中已定義的schema
參數(shù)
名稱類型說(shuō)明
optionsObject選項(xiàng)
options.loggingBoolean | function日志打印函數(shù)
2.39?sequelize.dropSchema()?- 刪除定義的schema
sequelize.dropSchema(schema, options={}) -> Promise
刪除數(shù)據(jù)庫(kù)中已定義指定名稱的schema
參數(shù)
名稱類型說(shuō)明
schemaStringschema 名
optionsObject選項(xiàng)
options.loggingBoolean | function日志打印函數(shù)
2.40?sequelize.dropAllSchemas()?- 刪除所有schema
sequelize.dropAllSchemas(options={}) -> Promise
刪除數(shù)據(jù)庫(kù)中所有已定義的schema
參數(shù)
名稱類型說(shuō)明
optionsObject選項(xiàng)
options.loggingBoolean | function日志打印函數(shù)
2.41?sequelize.sync()?- 同步模型到數(shù)據(jù)庫(kù)
sequelize.sync([options={}]) -> Promise
同步所有已定義的模型到數(shù)據(jù)庫(kù)中
參數(shù)
名稱類型說(shuō)明
[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ù)
名稱類型說(shuō)明
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ù)
名稱類型說(shuō)明
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ù)庫(kù)函數(shù)的對(duì)象冤荆。該函數(shù)可用于搜索查詢的where和order部分,以及做為列定義的默認(rèn)值权纤。如果想在列中引用你定義的函數(shù)钓简,就要使用sequelize.col,這樣列就能正確的解析汹想,而不是解析為字符串外邓。
如,將username字段值解析為大寫形式:
instance.updateAttributes({
? username: self.sequelize.fn('upper', self.sequelize.col('username'))
})
名稱類型說(shuō)明
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ù)庫(kù)列的對(duì)象古掏。這個(gè)方法經(jīng)常結(jié)合sequelize.fn使用损话,它可以保證將列名正確的傳遞給該方法,而不是經(jīng)過(guò)轉(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 語(yǔ)法解析以的嵌套對(duì)象
[value]-{String | Object}服赎,可選的比較值葵蒂,會(huì)生成 " = ''"
2.52?sequelize.where()?- 指定WHERE條件
json(conditions, [value]) -> Sequelize.json
指定屬性=條件。
屬性也可以從Model.rawAttributes對(duì)象獲戎芈恰(如:Model.rawAttributes.id践付、Model.rawAttributes.name)。屬性應(yīng)該已在模型中定義缺厉。也可以從sequelize工具函數(shù)中獲扔栏摺(如:sequelize.fn,、sequelize.col
當(dāng)使用字符串屬性是提针,用于{ where: { attr: something }}語(yǔ)法命爬。如果不希望屬性被轉(zhuǎn)義,請(qǐng)使用sequelize.literal辐脖。
attr-{Object}饲宛,屬性
[comparator='=']-{String}
logic-{String | Object},限制條件可以是簡(jiǎn)單字符串或進(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ù)
名稱類型說(shuō)明
[options={}]Object
[options.autocommit=true]Boolean是否自動(dòng)提交
[options.type='DEFERRED']String查看Sequelize.Transaction.TYPES绿鸣,僅 Sqlite 適用
[options.isolationLevel
='REPEATABLE_READ']
String事務(wù)的隔離級(jí)別疚沐,參見(jiàn)Sequelize.Transaction.ISOLATION_LEVELS
[options.logging=false]Function用于打印執(zhí)行SQL的函數(shù)