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

使用Drizzle向PostgreSQL原生SQL传数组时出现多余引号问题

在Drizzle中向PostgreSQL传递数组变量的正确方式

你之前的写法错误在于手动拼接字符串或硬编码引号,导致Drizzle将整个拼接结果视为单个参数,从而出现多余引号。以下是两种正确的实现方式:

方式1:直接传递JS数组到sql模板字符串

const arr = ['value 1', 'value 4'];

const result = await db.execute(sql`
  SELECT * FROM value_table
  WHERE ARRAY[${arr}] && array_values
`);

Drizzle会自动识别数组类型,将其转换为PostgreSQL的数组语法,最终生成的SQL和参数如下:

SELECT * FROM value_table
WHERE ARRAY ['value 1','value 4'] && array_values

params: ['value 1','value 4']

方式2:使用Drizzle的sql.array方法

const arr = ['value 1', 'value 4'];

const result = await db.execute(sql`
  SELECT * FROM value_table
  WHERE ${sql.array(arr)} && array_values
`);

这种方式更显式,Drizzle同样会正确处理数组的参数绑定,生成符合预期的SQL语句和参数列表。

错误写法的问题解析

  • 第一种错误写法中,你将数组转成了逗号分隔的字符串'value 1,value 4',Drizzle会把这个字符串当作单个参数,因此添加外层引号,导致数组仅包含一个元素。
  • 第二种错误写法手动给每个元素添加了引号,拼接后Drizzle仍会将整个拼接结果视为单个参数,进而添加外层引号,最终参数里出现多余的嵌套引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:05:02