将数组传递给 go-pg 查询

XZe*_*Zen 4 go go-pg

我正在使用 Go-pg,当我使用以下方式执行 sql 查询时:

db.Query(&result, sqlQuery, params)
Run Code Online (Sandbox Code Playgroud)

params如下所示的结构在哪里:

type MyParams struct {
    Codes []int
}
Run Code Online (Sandbox Code Playgroud)

并且sqlQuery

SELECT id FROM bar WHERE code_id IN (?codes)
Run Code Online (Sandbox Code Playgroud)

在实际的 SQL 查询中,我得到这样的查询:

SELECT id FROM bar WHERE code_id IN ('[7,45]')
Run Code Online (Sandbox Code Playgroud)

是否可以正确传递 int 数组占位符以进行查询:

SELECT id FROM bar WHERE code_id IN (7,45)
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 7

您可以做以下几件事:

  1. 继续使用in (...)和使用pg.In
  2. 使用= any(array)你的SQL,而不是in (list)pg.Array中转到合适的阵列发送到PostgreSQL。

第一个看起来像:

db.Query(&result, `SELECT id FROM bar WHERE code_id IN (?)`, pg.In(params.Codes))
Run Code Online (Sandbox Code Playgroud)

第二个看起来像:

db.Query(&result, `SELECT id FROM bar WHERE code_id = ANY (?)`, pg.Array(params.Codes))
Run Code Online (Sandbox Code Playgroud)