Sequelize中IN子句匹配数组查询报错,求问题排查
代码问题分析及修复
你的代码存在两个核心问题,还有一个需要补充的异常处理点:
SQL语法错误
原语句里的WHERE project_id IN = ?是错误写法,IN关键字后面不需要等号,正确格式应该是IN (?),用括号包裹待匹配的参数集合。数组参数传递错误
你把projectIds数组通过${projectIds}转成了字符串,这会让Sequelize把整个"1,2,3,4"当成单个字符串参数传递,数据库会去匹配project_id等于这个字符串的行,而不是匹配数组里的每个数字。直接传原始数组projectIds即可,Sequelize会自动处理数组类型的替换参数,生成正确的IN子句。缺失异常捕获
代码里没有处理异步操作的异常,导致出现UnhandledPromiseRejectionWarning,建议用try/catch包裹异步逻辑来捕获错误。
修复后的代码:
const { sequelize } = require("./db"); const { QueryTypes } = require("sequelize"); const projectIds = [1,2,3,4]; try { let rows = await sequelize.query( "SELECT * FROM `table_name` WHERE project_id IN (?)", { replacements: [projectIds], type: QueryTypes.SELECT, } ); console.log(rows); } catch (err) { console.error(err); }
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

