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

在Sequelize原生查询中使用from作为列名时出现语法错误

解决PostgreSQL中使用保留字作为列名的SQL语法错误

问题原因

from是PostgreSQL的保留关键字,直接在SQL语句中作为列名使用时,数据库会将其识别为SQL语法的一部分而非列名,因此抛出syntax error at or near "from"错误。

修复方案

1. 用双引号包裹保留字列名

在SQL中,用双引号将from列名括起来,明确告诉数据库这是一个标识符而非关键字。修正后的原生查询代码:

let sql = await db.sequelize.query(`INSERT INTO chats ( "from", msg, chat_room_id) VALUES (${sender},'${msg}',${chat_room_id})`);

2. 避免SQL注入(更推荐)

直接拼接变量到SQL语句中存在严重的SQL注入风险,建议使用Sequelize的参数绑定功能,同时也能自然处理保留字列名:

const [result] = await db.sequelize.query(
  `INSERT INTO chats ("from", msg, chat_room_id) VALUES (:sender, :msg, :chatRoomId)`,
  {
    replacements: { sender, msg, chatRoomId: chat_room_id },
    type: db.sequelize.QueryTypes.INSERT
  }
);

3. 长远方案:修改列名

如果业务允许,建议将from列名修改为非保留字(比如sender_id),从根源上避免这类语法冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:20:34