Sequelize 類 建立數據庫連接 模型定義


1:Sequelize 類

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

1.1 創建實例  這個實例就是數據庫連接對象


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 創建表


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

  // 已創建數據表

  return User.create({

    firstName: 'John',

    lastName: 'Hancock'

  });

});

force:如果為true 如果原來存在,則將原來的表刪除,並創建新的

         如果為false 創建表,如果原來存在,則不創建

2:api new Sequelize() - 實例化 創建連接


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

參數介紹:


database: 數據庫名

username=nul  String類型  數據庫用戶名

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

options={}:參數對象

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

[options.host='localhost'  String   連接數據庫的主機

options.port   連接數據庫的端口

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

options.logging=console.log  Function   用於Sequelize日志打印的函數

options.pool={}  對數據庫連接池的配置

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

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

sequelize.define(): 定義model

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


以下為屬性介紹:

modelName:表名


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

attributes.column:列的名字

attributes.column.type:列的數據類型

列的數據類型的介紹:

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:設置當前子段在數據庫中的名字。默認是column的值,如果添加這個屬性,那么數據庫中的字段名便是此值

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

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

以下是設置外鍵。。根據了解,現在公司一般不設置表與表之間的關系

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

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值,創建表時是否為模型添加 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.createdAt:Boolean值或字符串。。如果為字符串,則使用提供的值代替 createdAt 列的默認名,設置為flase則不添加這個字段。

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

options.updatedAt:同上

options.deletedAt:同上

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

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

options.hooks:一個包含鈎子函數的對象,這些函數會在生生命周期內某些事件發生之前或之后被調用。可添加的鈎子函數有:beforeValidate, 

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

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



3:api 對數據庫的操作 一般用不到

sequelize.createSchema(schema, options={}) -> Promise:創建數據庫schema

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

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

sequelize.dropAllSchemas() - 刪除所有schema

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

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():該實例方法用於返回實例類型(數據庫類型)

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

Sequelize.Utils:工具類

Sequelize.QueryTypes:查詢類型枚舉  猜測是模型執行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內部的驗證,如:非常、URL、IP等,也可以通過該屬性進行一些自定義驗證。

Sequelize.Transaction: 事物對象

Sequelize.Instance: 指向數據庫連接對象

Sequelize.Association: 指向Association類

4:數據庫的錯誤類型

Sequelize.Error: 錯誤對象

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

Sequelize.DatabaseError: 數據庫錯誤對象

Sequelize.TimeoutErro: 查詢超時對象

Sequelize.UniqueConstraintError:唯一性錯誤對象

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

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

Sequelize.ConnectionError:連接錯誤對象

Sequelize.ConnectionRefusedError: 一個指向數據庫連接被拒絕時觸發的錯誤對象

Sequelize.AccessDeniedError: 連接到數據庫但沒有訪問權限時會觸發此錯誤。

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

Sequelize.InvalidConnectionError:連接到數據庫但其中的任意參數出現錯誤時會觸發這個錯誤對象。

Sequelize.ConnectionTimedOutError:連接數據庫超時時會觸發這個錯誤對象。

Sequelize.InstanceError: 當任何實例方法出現問題時會觸發這個錯誤對象。



作者:一夜風情
鏈接:https://www.jianshu.com/p/af68364e5bdd
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM