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