如何将数组设置为SQL查询的参数

如何将数组设置为SQL查询的参数,sql,go,clickhouse,Sql,Go,Clickhouse,假设某个前端应用程序使用这样的主体向后端(Go)应用程序发送POST请求: { "city": "London", "gender": ["Female", "Male"], "has_family": [0, 1] } 正如您所看到的,请求主体有两个数组。我正在尝试将这些数组设置到SQL查询中。在我的例子中,我对ClickHouse数据库进行SQL查询。我使用这个包来完成这个任务 我尝试了这样的代码,但出现了一个错误: sql:转换参数$2类型:不支持的类型[]字符串

假设某个前端应用程序使用这样的主体向后端(Go)应用程序发送
POST
请求:

{
    "city": "London",
    "gender": ["Female", "Male"],
    "has_family": [0, 1]
}
正如您所看到的,请求主体有两个数组。我正在尝试将这些数组设置到SQL查询中。在我的例子中,我对
ClickHouse
数据库进行SQL查询。我使用这个包来完成这个任务

我尝试了这样的代码,但出现了一个错误:

sql:转换参数$2类型:不支持的类型[]字符串,一个切片 弦的

此外,我还尝试将数据类型从
[]字符串
更改为
[]接口{}
。不幸的是,在这种情况下,它会引发如下错误:

sql:转换参数$2类型:不支持的类型[]接口{},a 接口切片

代码

var Controller = func(responseWriter http.ResponseWriter, request *http.Request) {
    type RequestBody struct {
        City string `json:"city"`
        Gender []string `json:"gender"`
        HasFamily []int `json:"has_family"`
    }

    requestBody := RequestBody{}

    decoder := json.NewDecoder(request.Body)

    if err := decoder.Decode(&requestBody); err != nil {
        fmt.Println(err)
        return
    }

    rows, err := database.ClickHouse.Query("SELECT * FROM TABLE_NAME WHERE lower(CITY) = lower($1) AND GENDER IN ($2) AND HAS_FAMILY IN ($3);", requestBody.City, requestBody.Gender, requestBody.HasFamily)
    if err != nil {
        fmt.Println(err)
        return
    }

    // other code
}

尝试使用
clickhouse.Array()
包装
requestBody.Gender
requestBody.HasFamily
。并尝试将
$n
更改为

代码:

行,错误:=database.ClickHouse.Query(
“从表格_NAME中选择*,其中较低(城市)=较低(?)和性别在(?)中,并且在(?)中有_族;”,
你的身体,城市,
clickhouse.Array(requestBody.Gender),
clickhouse.Array(requestBody.HasFamily),
)

更多信息:

尝试使用
clickhouse.Array()
包装
requestBody.Gender
requestBody.hasfamine
。并尝试将
$n
更改为

代码:

行,错误:=database.ClickHouse.Query(
“从表格_NAME中选择*,其中较低(城市)=较低(?)和性别在(?)中,并且在(?)中有_族;”,
你的身体,城市,
clickhouse.Array(requestBody.Gender),
clickhouse.Array(requestBody.HasFamily),
)

更多信息:

感谢您的重播!我试图测试您的代码,但它引发了一个错误:
clickhouse:code:53,e.displayText()=DB::Exception:or VALUES部分中的类型不匹配。应为:字符串。获得:数组(版本19.14.6.12(官方版本))
。我还注意到,
$1
$2
$3
引发了这样的错误:
点击房屋:错误的占位符计数
。因此,我将它们更改为
。你对此有什么想法吗?@NurzhanNogerbek刚刚更新了我的答案。顺便说一句,你能不能也分享一下表格方案?希望确保列的数据类型为valid@NurzhanNogerbek关于
$n
,我检查了源代码,它不是有效的占位符语法。
是在图书馆中使用的
城市
列的数据类型是
字符串
Gender
列的数据类型也是
String
HAS_FAMILY
列的数据类型是
UInt8
@NurzhanNogerbek I,尽管
Gender
HAS_FAMILY
Array
。如果它不是数组,则需要使用分隔符将值连接起来。,感谢您的重播!我试图测试您的代码,但它引发了一个错误:
clickhouse:code:53,e.displayText()=DB::Exception:or VALUES部分中的类型不匹配。应为:字符串。获得:数组(版本19.14.6.12(官方版本))
。我还注意到,
$1
$2
$3
引发了这样的错误:
点击房屋:错误的占位符计数
。因此,我将它们更改为
。你对此有什么想法吗?@NurzhanNogerbek刚刚更新了我的答案。顺便说一句,你能不能也分享一下表格方案?希望确保列的数据类型为valid@NurzhanNogerbek关于
$n
,我检查了源代码,它不是有效的占位符语法。
是在图书馆中使用的
城市
列的数据类型是
字符串
Gender
列的数据类型也是
String
HAS_FAMILY
列的数据类型是
UInt8
@NurzhanNogerbek I,尽管
Gender
HAS_FAMILY
Array
。如果不是数组,则需要使用分隔符