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

如何使用knex简洁编写UPDATE...SET...FROM格式的SQL语句?

Knex 实现 UPDATE...SET...FROM 语句的简洁方案

你目前的手动拼接SQL的方案虽然可运行,但存在语法拼接失误、SQL注入等潜在风险,Knex 0.95及以上版本已经原生支持update方法链式调用from子句,无需手动拼接字符串,写法如下:

const result = await knex('user_subscriptions as us')
  .update(subscription)
  .from('plans as p')
  .where('us.customer_id', customer_id)
  .where('p.id', 'us.plan_id')
  .returning(['us.*', 'p.name'])

该写法的优势:

  • 全链式调用符合Knex的API设计规范,代码可读性更高
  • 自动完成参数绑定,不需要手动处理占位符,从根源避免SQL注入风险
  • 生成的SQL和你手动拼接的效果完全一致,依然是单次查询返回关联表字段,没有额外性能开销

如果你使用的Knex版本低于0.95暂时无法升级,可以使用更安全的全raw写法替代字符串拼接:

const result = await knex.raw(`
  UPDATE user_subscriptions us
  SET ?
  FROM plans p
  WHERE us.customer_id = ? AND p.id = us.plan_id
  RETURNING us.*, p.name
`, [subscription, customer_id])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:42:03