You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Knex(Postgres)中正确构造含静态$type列的SELECT语句?

解决Knex中带引号别名的静态列查询问题

不用knex.raw()完全可以实现你要的效果,Knex的select()方法支持对象语法来处理这种带特殊字符的别名,完美避开引号被破坏的问题。

正确的写法示例

knex('patrol')
  .select('*', { '"$type"': 'Patrol' })

另一种等价写法

如果你习惯拆分select调用,也可以这样写:

knex('patrol')
  .select('*')
  .select({ '"$type"': 'Patrol' })

为什么这个写法有效?

Knex对select中的对象参数会做特殊处理:

  • 对象的键会被直接作为列的别名(保留你写的双引号,不会被转义破坏)
  • 对象的值会被当作静态字符串值,自动处理成SQL里的'Patrol'格式

最终生成的SQL就是你需要的:

select *, 'Patrol' as "$type" from patrol;

之前你碰到引号被破坏的问题,是因为直接把别名和值写在同一个字符串里时,Knex会把整个字符串当作列名来转义,导致引号结构混乱。用对象语法就能清晰区分静态值和带特殊格式的别名,让查询构建器正确解析。

内容的提问来源于stack exchange,提问作者grahamb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:08:53