首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递数组到go-pg查询

传递数组到go-pg查询
EN

Stack Overflow用户
提问于 2018-07-03 13:49:36
回答 3查看 5.3K关注 0票数 6

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

代码语言:javascript
复制
db.Query(&result, sqlQuery, params)

其中params是如下所示的结构:

代码语言:javascript
复制
type MyParams struct {
    Codes []int
}

sqlQuery

代码语言:javascript
复制
SELECT id FROM bar WHERE code_id IN (?codes)

在实际的SQL查询中,我得到如下查询:

代码语言:javascript
复制
SELECT id FROM bar WHERE code_id IN ('[7,45]')

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

代码语言:javascript
复制
SELECT id FROM bar WHERE code_id IN (7,45)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-03 20:12:23

有几件事你可以做:

  1. 继续使用in (...)并使用pg.In
  2. 在SQL中使用= any(array),而不是在Go中使用in (list)pg.Array来向PostgreSQL发送正确的数组。

第一个看起来是:

代码语言:javascript
复制
db.Query(&result, `SELECT id FROM bar WHERE code_id IN (?)`, pg.In(params.Codes))

第二个看起来是:

代码语言:javascript
复制
db.Query(&result, `SELECT id FROM bar WHERE code_id = ANY (?)`, pg.Array(params.Codes))
票数 10
EN

Stack Overflow用户

发布于 2020-01-04 21:55:48

您可以使用go-pg ORM来获得相同的结果:

代码语言:javascript
复制
ids := []int{1, 2, 3}
err := db.Model((*Book)(nil)).
    Where("id in (?)", pg.In(ids)).
    Select()

// SELECT * FROM books WHERE id IN (1, 2, 3)
票数 2
EN

Stack Overflow用户

发布于 2018-07-03 14:01:04

一种方法是使用创建字符串所需的分隔符创建字符串,然后将其传递给db.query以获取结果。

代码语言:javascript
复制
package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    a := []int{7,45,32}
    str := ConvertToString(a, ",")
    query := `Select * from table1 where ID IN(`+ str +`)`
    fmt.Println(query)
}

func ConvertToString(a []int, delim string) string{
    var b string
    for _, v := range a{
        b += strconv.Itoa(v)
        b += ","
    }
    return strings.Trim(b,",")
}

游乐场上的工作代码。

编辑:-

您可以为您的需求使用戈朗广场包。

database/sql包不检查查询,它直接将参数传递给驱动程序,这使得处理IN子句的查询变得困难:

代码语言:javascript
复制
SELECT * FROM users WHERE level IN (?);

当它作为后端上的语句准备时,bindvar呢?将只对应于单个参数,但通常希望的是,根据某个片段的长度,这是一个可变的参数数,例如:

代码语言:javascript
复制
var levels = []int{4, 6, 7}
rows, err := db.Query("SELECT * FROM users WHERE level IN (?);", levels)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51156305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档