2018-09-27 Sequelize 類 建立數(shù)據(jù)庫連接 模型定義-- 筆記

官方:?https://demopark.github.io/sequelize-docs-Zh-CN/

https://blog.csdn.net/awhlmcyn/article/details/79816430

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

1:Sequelize?類

Sequelize是引用Sequelize模塊獲取的一個頂級對象,通過這個類可以獲取模塊內(nèi)對其他對象的引用。比如utils、Transaction事務類。通過這個頂級對象創(chuàng)建實例后(連接數(shù)據(jù)庫),可以使用這個實例定義模型,使用這個模型進行sql操作

1.1 創(chuàng)建實例? 這個實例就是數(shù)據(jù)庫連接對象


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'

});


1.2 定義model


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名相同

});


1.3 創(chuàng)建表


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

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

? return User.create({

? ? firstName: 'John',

? ? lastName: 'Hancock'

? });

});

force:如果為true 如果原來存在,則將原來的表刪除,并創(chuàng)建新的

? ? ? ? ?如果為false 創(chuàng)建表,如果原來存在,則不創(chuàng)建

2:api new Sequelize()?- 實例化 創(chuàng)建連接


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

參數(shù)介紹:


database: 數(shù)據(jù)庫名

username=nul??String類型? 數(shù)據(jù)庫用戶名

password=null? string類型? 注意:就算全部都是數(shù)字,也應該是字符串數(shù)字,不然會報錯

options={}:參數(shù)對象

options.dialect='mysql’? String類型? ?要連接的數(shù)據(jù)庫類型。可選值有:mysql、postgres、sqlite、mariadb、mssql

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

options.port? ?連接數(shù)據(jù)庫的端口

options.define={}? 預先定義的model

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

options.pool={}? 對數(shù)據(jù)庫連接池的配置

3: api 定義模型以及原始查詢

sequelize.models: 獲取在創(chuàng)建連接時,預先定義的model模型

sequelize.define(): 定義model

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


以下為屬性介紹:

modelName:表名


attributes:是一個對象,對列的描述主要屬性如下:等號的意思是默認值

attributes.column:列的名字

attributes.column.type:列的數(shù)據(jù)類型

列的數(shù)據(jù)類型的介紹:

Sequelize.STRING// VARCHAR(255)

Sequelize.STRING(1234)// VARCHAR(1234)

Sequelize.STRING.BINARY? ? ? ? ? ? ? // VARCHAR BINARY

Sequelize.TEXT// TEXT

Sequelize.TEXT('tiny')// TINYTEXT

Sequelize.INTEGER// INTEGER

Sequelize.BIGINT// BIGINT

Sequelize.BIGINT(11)// BIGINT(11)

Sequelize.FLOAT// FLOAT

Sequelize.FLOAT(11)// FLOAT(11)

Sequelize.FLOAT(11, 12)// FLOAT(11,12)

Sequelize.REAL// REAL? ? ? ? PostgreSQL only.

Sequelize.REAL(11)// REAL(11)? ? PostgreSQL only.

Sequelize.REAL(11, 12)// REAL(11,12) PostgreSQL only.

Sequelize.DOUBLE// DOUBLE

Sequelize.DOUBLE(11)// DOUBLE(11)

Sequelize.DOUBLE(11, 12)// DOUBLE(11,12)

Sequelize.DECIMAL// DECIMAL

Sequelize.DECIMAL(10, 2)// DECIMAL(10,2)

Sequelize.DATE// DATETIME for mysql / sqlite, TIMESTAMP WITH TIME ZONE for postgres

Sequelize.DATE(6)// DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 digits of precision

Sequelize.DATEONLY// DATE without time.

Sequelize.BOOLEAN// TINYINT(1)

Sequelize.ENUM('value 1', 'value 2')// An ENUM with allowed values 'value 1' and 'value 2'

Sequelize.ARRAY(Sequelize.TEXT)// Defines an array. PostgreSQL only.

Sequelize.JSON// JSON column. PostgreSQL only.

Sequelize.JSONB// JSONB column. PostgreSQL only.

Sequelize.BLOB// BLOB (bytea for PostgreSQL)

Sequelize.BLOB('tiny')// TINYBLOB (bytea for PostgreSQL. Other options are medium and long)

Sequelize.UUID//? PostgreSQL 和 SQLite 中為 UUID, MySQL 中為CHAR(36) BINARY (使用 defaultValue: Sequelize.UUIDV1 或 Sequelize.UUIDV4 生成默認值)

Sequelize.RANGE(Sequelize.INTEGER)// Defines int4range range. PostgreSQL only.

Sequelize.RANGE(Sequelize.BIGINT)// Defined int8range range. PostgreSQL only.

Sequelize.RANGE(Sequelize.DATE)// Defines tstzrange range. PostgreSQL only.

Sequelize.RANGE(Sequelize.DATEONLY)// Defines daterange range. PostgreSQL only.

Sequelize.RANGE(Sequelize.DECIMAL)// Defines numrange range. PostgreSQL only.

Sequelize.ARRAY(Sequelize.RANGE(Sequelize.DATE))// Defines array of tstzrange ranges. PostgreSQL only.

Sequelize.GEOMETRY// Spatial column.? PostgreSQL (with PostGIS) or MySQL only.

Sequelize.GEOMETRY('POINT')// Spatial column with geomerty type.? PostgreSQL (with PostGIS) or MySQL only.

Sequelize.GEOMETRY('POINT', 4326)// Spatial column with geomerty type and SRID.? PostgreSQL (with PostGIS) or MySQL only.

attributes.column.allowNull=true:Boolean值,為false時,會添加非空約束。

attributes.column.defaultValuee=null:列的默認值

attributes.column.unique=false:是否添加唯一性約束,為true時添加唯一性約束

attributes.column.primaryKey=false:是否為主鍵

attributes.column.field=null:設(shè)置當前子段在數(shù)據(jù)庫中的名字。默認是column的值,如果添加這個屬性,那么數(shù)據(jù)庫中的字段名便是此值

attributes.column.autoIncrement=false:Boolean值,是否自增長

attributes.column.validate:模型驗證,在對數(shù)據(jù)執(zhí)行改變時,先驗證是否符合要求。 // 一般使用代碼驗證

以下是設(shè)置外鍵。。根據(jù)了解,現(xiàn)在公司一般不設(shè)置表與表之間的關(guān)系

attributes.column.references:引用對象。設(shè)置這個屬性證明這個鍵是外鍵

attributes.column.references.model:這屬性指向一個model。

attributes.column.references.key='id‘:另一個model的主鍵

bar_id:{?

?type:Sequelize.INTEGER,?

?references:{

//這是引用另一個模型

model:Bar,

//這是引用模型的列名稱

key:'id'} }


option是一個對象,以下是對options的字段介紹:

options.timestamps:boolean值,創(chuàng)建表時是否為模型添加 createdAt 和 updatedAt 兩個時間戳字段(一般不用,自己創(chuàng)建這個字段)

options.paranoid=false:Boolean值,使用邏輯刪除。設(shè)置為true后,調(diào)用?destroy?方法時將不會刪隊模型,而是設(shè)置一個?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時,sequelize不會改變表名,否則可能會按其規(guī)則有

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

????????????????????????????????個人理解就是為這個字段起別名

options.updatedAt:同上

options.deletedAt:同上

options.tableName:模型所對應表的表名,設(shè)置freezeTableName 為 true時,才會嚴格使用模型名

options.initialAutoIncrement:String類型 MySQL中設(shè)置 AUTO_INCREMENT (自增)的初始值

options.hooks:一個包含鉤子函數(shù)的對象,這些函數(shù)會在生生命周期內(nèi)某些事件發(fā)生之前或之后被調(diào)用。可添加的鉤子函數(shù)有:beforeValidate,?

? ? ? ? ? ? ? ? ? ? ? ? ? afterValidate, beforeBulkCreate, beforeBulkDestroy, beforeBulkUpdate, beforeCreate, beforeDestroy, beforeUpdate, afterCreate,?

? ? ? ? ? ? ? ? ? ? ? ? ? afterDestroy, afterUpdate, afterBulkCreate, afterBulkDestory 和 afterBulkUpdate。每個屬性可以是一個函數(shù),或是一個包含一組函? ? ? ? ? ? ? ? ? ? ? ? ? ? 數(shù)的數(shù)組



3:api 對數(shù)據(jù)庫的操作 一般用不到

sequelize.createSchema(schema, options={}) -> Promise:創(chuàng)建數(shù)據(jù)庫schema

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

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

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

sequelize.sync()?- 同步模型到數(shù)據(jù)庫 (這個有用)

sequelize.drop()?- 刪除表

sequelize.authenticate()?- 驗證連接

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

})

sequelize.getDialect():該實例方法用于返回實例類型(數(shù)據(jù)庫類型)

sequelize.getQueryInterface():返回QueryInterface的實例 這對象的內(nèi)置方法主要是對表的操作,增刪改查

Sequelize.Utils:工具類

Sequelize.QueryTypes:查詢類型枚舉? 猜測是模型執(zhí)行sql時使用。暫不清楚用法

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',

};

Sequelize.Validator:?對象用于Sequelize內(nèi)部的驗證,如:非常、URL、IP等,也可以通過該屬性進行一些自定義驗證。

Sequelize.Transaction: 事物對象

Sequelize.Instance: 指向數(shù)據(jù)庫連接對象

Sequelize.Association: 指向Association類

4:數(shù)據(jù)庫的錯誤類型

Sequelize.Error: 錯誤對象

Sequelize.ValidationError: 驗證失敗成此對象

Sequelize.DatabaseError: 數(shù)據(jù)庫錯誤對象

Sequelize.TimeoutErro: 查詢超時對象

Sequelize.UniqueConstraintError:唯一性錯誤對象

Sequelize.ForeignKeyConstraintError: 違反外鍵約束錯誤對象

Sequelize.ExclusionConstraintError:違反排除約束對象

Sequelize.ConnectionError:連接錯誤對象

Sequelize.ConnectionRefusedError:?一個指向數(shù)據(jù)庫連接被拒絕時觸發(fā)的錯誤對象

Sequelize.AccessDeniedError:?連接到數(shù)據(jù)庫但沒有訪問權(quán)限時會觸發(fā)此錯誤。

Sequelize.HostNotFoundError:?連接數(shù)據(jù)但主機名(IP或URI)未找到時會觸發(fā)這個錯誤對象。

Sequelize.InvalidConnectionError:連接到數(shù)據(jù)庫但其中的任意參數(shù)出現(xiàn)錯誤時會觸發(fā)這個錯誤對象。

Sequelize.ConnectionTimedOutError:連接數(shù)據(jù)庫超時時會觸發(fā)這個錯誤對象。

Sequelize.InstanceError:?當任何實例方法出現(xiàn)問題時會觸發(fā)這個錯誤對象。

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

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

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