Sequelize是什么?

Sequelize 是一個基於 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有強大的事務支持, 關聯關系, 預讀和延遲加載,讀取復制等功能。
Sequelize 遵從 語義版本控制。 支持 Node v10 及更高版本以便使用 ES6 功能。
說簡單點sequelize就是幫助我們操作數據庫的一個ORM(Object–relational mapping,對象關系映射)框架,我們使用mysql2操作數據庫,要使用各種原生的sql語句去操作,功能簡單還好說,功能復雜龐大就會顯得很麻煩,繁瑣,畢竟要寫大量的原生sql語句,sequelize的出現幫助我們只需要通過對象的方式就可以完成數據庫表創建、設計、數據的CRUD操作,簡化開發、提高效率。
中文文檔:https://www.sequelize.com.cn/
安裝
Sequelize 的使用可以通過 npm (或 yarn).
npm install --save sequelize
你還必須手動為所選數據庫安裝驅動程序:
# 選擇以下之一:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server
因為我們要操作的是mysql,所以這個地方我們選擇mysql2。
連接到數據庫
const Sequelize = require('sequelize');
// 創建Sequelize的實例對象並配置連接信息
const sequelize = new Sequelize({
host: '127.0.0.1',
username: 'root',
password: 'root',
database: 'todos',
dialect: 'mysql',
timezone: 'Asia/Shanghai' //當我們向數據庫中寫入時間的時候,默認會根據系統當前所在時區進行設置
})
// 測試連接
sequelize.authenticate().then(_=>{
console.log("數據庫連接成功!");
}).catch(err=>{
console.log("數據庫連接失敗! ", err);
})
new Sequelize options:
host:主機,默認localhost
port:端口,默認3306
dialect:數據庫類型,默認mysql,必填
timezone:時區,影響數據庫日期時間格式的值,格式:+08:00 或 字符串格式
什么是模型?
用來表述(描述)數據庫表字段信息的對象,每一個模型對象表示數據庫中的一個表,后續對數據庫的操作都是通過對應的模型對象來完成的。
模型對象
創建模型對象
public define(modelName: String, attributes: Object, options: Object): Model
- modelName:模型名稱,自定義
- attributes:模型中包含的數據,每一個數據映射對應表中的每一個字段
- options:模型(表)的設置
/**
* 數據庫連接完成以后,需要確定操作的表
* 使用ORM,不需要通過sql來操作表,而是通過對象來操作
* 給每一個要操作的表定義一個對象 - 模型 Model
*/
const UserModel = sequelize.define('User', {
// 描述表中對應的字段信息
// 對象的key默認對應這表的column字段
id: {
// 每一個字段的信息
type: Sequelize.INTEGER(10), // 整數類型
allowNull: false, // 不允許為空
primaryKey: true, // 設置為主鍵
autoIncrement: true // 允許自增
},
username: {
type: Sequelize.STRING(255),
allowNull: false,
defaultValue: 0
},
age: {
type: Sequelize.TINYINT,
allowNull: false,
defaultValue: 0
},
gender: {
type: Sequelize.ENUM(['男', '女', '默認']), // 注意枚舉類型為數組
allowNull: false,
defaultValue: '男'
}
}, {
// 用來設置字段以外的其他信息
timestamps: false,
paranoid: false,
freezeTableName: true,
tableName: 'user',
indexes: [{
name: 'uname',
fields: ['username']
}, {
name: 'age',
fields: ['age']
}]
})
attributes 設置
attributes是一個對象,里面包含了對應的表中的字段信息,key表示字段名稱,值是字段的具體描述。
字段值描述
type: 字段類型,String|DataTypes
allowNull: 是否允許為空,默認為true
defaultValue: 默認值,默認為null
unique: 值唯一,默認為false
primaryKey: 是否為主鍵,默認為false
field: 數據庫中字段的實際名稱
autoIncrement: 是否自增,默認false
get: 字段的getter,函數
set: 字段的setter,函數
validate: 對象,對當前字段值發生改變的時候進行驗證
模型額外配置
timestamps:是否給每條記錄添加 createdAt 和 updatedAt 字段,並在添加新數據和更新數據的時候自動設置這兩個字段的值,默認為true
paranoid:設置 deletedAt 字段,當刪除一條記錄的時候,並不是真的銷毀記錄,而是通過該字段來標識,即保留數據,進行假刪除,默認為false
freezeTableName:禁用修改表名; 默認情況下,sequelize將自動將所有傳遞的模型名稱(define的第一個參數)轉換為復數。 默認為false
tableName:手動設置表的實際名稱
定義表的索引
indexes:Array