sequlize.query

usage

定義好表對應的model

const Sequelize = require('sequelize');
// 建立連接
const sequlize   = new Sequlize('databaseName', 'user', 'password', {
    host: 'dataBaseServerHost',
    pool: {
        max: 20,
        min: 0
    }
});
const model =  sequelize.define('modelname', {
    // ...

},
{
// ...
});

使用

sequlize.query(`select * from modelName`)
  .spread(function(searchResult, metaDate) {
    // ...deal result
  });

——————————————————分割線(以下爲補充的說明)—————————————————–

搜索結果的說明

sequlize.query根據數據庫的返回,總會返回一個promise對象,其中包含了兩個數據對象: 搜索的結果數組 & 搜索的元數據對象(metadate,例如 affected rows etc.).

但是,不同的數據庫語言,對搜索結果的返回也不一樣.

mysql的元數據直接存在搜索結果數組的屬性中.因此,mysql的sql查詢,返回的searchResult和metaDate是指向一個對象

query configuration


  • type

設定查詢的類型.
// 以下類型,告知sequlize只需要查詢結果(spread可以不要使用).還有其他可以設置的類型,閱讀文檔.
sequlize.query(`select * from modelName`, {type: sequelize.QueryTypes.SELECT})
  .then(function(searchResult) {
    // ...deal result
  });


  • model

告知sequlize將結果處理成 model對象

// model參數設置成model對象, 將會使返回的結果是一個model的實例.否則就是單純的數據對象組成的數組.
sequlize.query(`select * from modelName`, {model: model})
  .spread(function(searchResult, metaDate) {
    // ...deal result
  });


  • replacements

替換字符串(-_-想不出好名字,直接看效果)

// 對象類型
sequlize.query(`select * from tableName where name=:name`, {replacements: {name: '@sunhao'}, type: sequelize.QueryTypes.SELECT})
  .then((data) => {
    // ...
  });

// 數組類型
sequlize.query(`select * from tableName where name=?`, {replacements: ['@sunhao'], type: sequelize.QueryTypes.SELECT})
  .then((data) => {
    // ...
  });

// 以上兩種相當於
// select * from tableName where name =`@sunhao`;

// 說明
/*
replacements設爲對象obj, 在query語句中使用 :key , 替換時 會使用obj[key]替換.

如果找不到該數據.就會throw Exception.
*/
/*
replacements設爲數組, 在query語句中使用 ? , 替換時 會根據?出現的順序,依次從數組中取出數據 進行替換.
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章