sequlize.query<raw sql语句查询>

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语句中使用 ? , 替换时 会根据?出现的顺序,依次从数组中取出数据 进行替换.
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值