博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sequelize如何使用原生语句
阅读量:6417 次
发布时间:2019-06-23

本文共 2789 字,大约阅读时间需要 9 分钟。

前言:

最近写的一个接口需要用到子查询,并且子查询的结果并不是可以在另外一个查询语句中直接当作in的选项,没办法区sequelize官网上看了一下如何直接使用原生语句

sequelize文档内容翻译

看一段官网中代码例子,一一说明

//1sequelize.query('SELECT 1', {  logging: console.log,    plain: false,   raw: false,  type: Sequelize.QueryTypes.SELECT})//2sequelize  .query('SELECT * FROM projects', { raw: true })  .then(projects => {    console.log(projects)  })//3sequelize.query('SELECT * FROM projects WHERE status = ?',  { replacements: ['active'], type: sequelize.QueryTypes.SELECT }).then(projects => {  console.log(projects)})//4sequelize.query('SELECT * FROM projects WHERE status = :status ',  { replacements: { status: 'active' }, type: sequelize.QueryTypes.SELECT }).then(projects => {  console.log(projects)})复制代码
  • sequelize中提供了query函数,用于直接操作原生语句

  • 该函数将返回两个参数 - 结果数组和包含元数据的对象,对于mysql将是返一对象的两个引用。

  • query函数的第二个参数,是一个对象,对象里面几个常用参数进行说明。

    1. pain:如果plain为真,那么sequelize只返回第一个 记录结果集。如果为false,则返回所有记录。
    2. type:正在执行的查询的类型(也可以is hi更新哦,具体哪些去看官网api)。查询类型影响返回结果之前的格式化方式。
    3. raw:查询对类型是否有模型定义,如果您的查询没有模型定义,请将此设置为true。
    4. logging: console.log记录查询的函数 是否会为发送的每个SQL查询调用 到服务器。
  • 对于查找条件where后面的字段

    1. 如果传递数组,?将按它们在数组中出现的顺序进行替换。
    2. 如果传递了一个对象,:key则将替换该对象中的键。如果对象包含查询中未找到的键,会抛出查询异常。
  • 对于替换where后面的变量,也可以使用in关键字从数组匹配,也可以使用通配符like%等 代码如下:

//in关键字使用官网例子sequelize.query('SELECT * FROM projects WHERE status IN(:status) ',  { replacements: { status: ['active', 'inactive'] }, type: sequelize.QueryTypes.SELECT }).then(projects => {  console.log(projects)})//like通配符关键字使用官网例子sequelize.query('SELECT * FROM users WHERE name LIKE :search_name ',  { replacements: { search_name: 'ben%'  }, type: sequelize.QueryTypes.SELECT }).then(projects => {  console.log(projects)})复制代码
  • 查询的时候还可以直接传递model,如果传递模型,则返回的数据将是该模型的实例,上面其它字段也可以在这使用
sequelize  .query('SELECT * FROM projects', {    model: Projects,    mapToModel: true // 如果有任何映射字段,则在这里传递true  })  .then(projects => {    // Each record will now be an instance of Project  })复制代码

sequelize原生语句具体使用实例

看一段我在开发过程中怎么使用的原生语句查询 代码如下:

let sqlRank = `SELECT userspk.avatar AS user_avatar,         userspk.gender AS user_gender,         userspk.nickname AS user_nickname,        a.id AS pk_record_id,        a.user_id,         a.answer_record,         a.pk_type,          MAX(score) AS score,         a.create_time        FROM (select * from pkrecord  order by score desc,create_time asc) as a         INNER JOIN userspk AS userspk         ON a.user_id = userspk.user_id        WHERE a.status = 1         AND a.pk_type = 'noreal'         AND a.subject_id = :subject_id        GROUP BY user_id        ORDER BY a.score DESC         LIMIT 3;`let pkRankResult= await ctx.main.query(sqlRank,  {    replacements: {        subject_id: subject_id,    },    type: Sequelize.QueryTypes.SELECT });复制代码

注意 replacements中的subject_id变量是从前端请求获取的参数值,是一个变量哦

附件:

官网中原生语句查询地址:

觉得本文对你有帮助?请分享给更多人

欢迎大家关注我的公众号——程序员成长指北。请自行微信搜索——“程序员成长指北”

转载地址:http://umvra.baihongyu.com/

你可能感兴趣的文章
重置mysq root密码脚本
查看>>
我的友情链接
查看>>
MHA配置参数
查看>>
深入理解Lock
查看>>
vim的块选择
查看>>
HTML --块
查看>>
在DLL中获取主进程窗口句柄
查看>>
基于消息队列的双向通信
查看>>
一个不错的loading效果
查看>>
Debian允许root用户登录
查看>>
linux的文件系统
查看>>
上云利器,K8S应用编排设计器之快到极致
查看>>
袋鼠云服务案例系列 | 从DB2到MySQL,某传统金融平台的互联网转型之路
查看>>
RealServer配置脚本
查看>>
九月份技术指标 华为交换机的简单配置
查看>>
python 写json格式字符串到文件
查看>>
分布式文件系统MogileFS
查看>>
电力线通信载波模块
查看>>
linux vim详解
查看>>
Java23种设计模式案例:策略模式(strategy)
查看>>