【node】Sequelize常用操作、基本增刪改查

sequelize初始化

先初始化一個數據庫實例

// 實例化數據庫對象-數據庫連接池
var sequelize = new Sequelize(
CONFIG.MYSQL.database, //數據庫名
CONFIG.MYSQL.username, //賬號
CONFIG.MYSQL.password, //密碼
{
  host: CONFIG.MYSQL.host,//端口,一般爲localhost
  // 數據庫類型
  dialect: 'mysql',
  
  // 是否打印日誌
  logging: CONFIG.DEBUG ? console.log : false,

  // 配置數據庫連接池
  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },

  // 時區設置
  timezone: '+08:00'
});

再初始化一個model實例

// 定義model
const Wish = db.define('Wish', {
  // 定義主鍵,autoIncrement 選項用於創建一個自增的整型列
  id: {type: Sequelize.INTEGER, primaryKey: true, allowNull: false, autoIncrement: true},
  // 日期默認值 => 當前時間
  myDate: { type: Sequelize.DATE, defaultValue: Sequelize.NOW },
  // 添加唯一(unique)約束後插入重複值會報錯
  someUnique: {type: Sequelize.STRING, unique: true},
  // 可以通過 "field" 屬性來指定數據庫中的字段名
  fieldWithUnderscores: { type: Sequelize.STRING, field: "field_with_underscores" },
}, {
  // 是否支持駝峯
  underscored: true,
  // MySQL數據庫表名
  tableName: 'wish',
});

sequelize的數據類型

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.

基本增刪改查的寫法

SELECT * FROM 表名 WHERE 屬性名 = 值

寫法:

model對象名
.findOne({ where: {屬性名:}}).then(function(result) {
  console.log(result.dataValues)
})

SELECT * FROM 表名

寫法:

model對象名
.findAll({
	raw: true
	}).then(function(result) {
  console.log(result)
})

SELECT * FROM 表名 OREDER BY 屬性名 DESC LIMIT 3

寫法:

model對象名
.findAll({
	limit: 3,
	order: [['屬性名', 'DESC']]
	}).then(function(result) {
	  	result.forEach((v) => {
	    	console.log(v.dataValues);
	});
})

SELECT count(*) AS count FROM 表名

寫法:

model對象名
.count().then(function(c) {
  console.log("表中有" + c + " 個元素")
})

SELECT max(屬性名) AS max FROM 表名

寫法:

model對象名
.max('屬性名').then(function(c) {
  console.log("表中最大值爲" + c)
})

SELECT min(屬性名) AS min FROM 表名

寫法:

model對象名
.min('屬性名').then(function(c) {
  console.log("表中最小值爲" + c)
})

SELECT sum(屬性名) AS sum FROM 表名

寫法:

model對象名
.sum('屬性名').then(function(c) {
  console.log("表中求和爲" + c)
})

INSERT INTO 表名 VALUES(‘value1’, …)

model對象名
.create({  
  屬性名1 :,
  屬性名2 :,
  屬性名3 :,
  ...
});

UPDATE 表名 SET 屬性名1=新值 WHERE 屬性名2=值

model對象名
.update({   
  屬性名1: 新值,  
},
{
  where:{屬性名2:}
});

DELETE FROM 表名 WHERE 屬性名=值

model對象名
.destroy({   
  where: {屬性名:}  
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章