【问题标题】:Inserting golang slice directly into postgres array将golang切片直接插入postgres数组
【发布时间】:2020-09-03 05:26:58
【问题描述】:

直接将 slice 插入 postgres 数组时遇到问题,找不到简单的解决方案。

给定:

favorites := []int{1,2,3,4,5}
// need to 
_, err = db.Exec(fmt.Sprintf("UPDATE users SET favorites = '{%v}';", favorites))

因为输入是 '{[1,2,3,4,5]}' 而不是 '{1,2,3,4,5}' 我有一个错误。 我正在使用默认 SQL 包和“github.com/lib/pq”postgres 驱动程序。

【问题讨论】:

    标签: postgresql go


    【解决方案1】:

    您应该使用 pq.Array(favorites) 正确插入它。正如您在source code中看到的那样

    应该是这样的:

    favorites := []int{1,2,3,4,5}
    
    query:= "UPDATE users SET favorites = $1;"
    
    _, err = db.Exec(query, pq.Array(favorites))
    

    【讨论】:

    • 也许我有这种行为是因为切片的类型(最初是 pq.Int64Array)?
    • 在这种情况下,您的切片应该是 []int64{1,2,3,4,5}
    • @ArthurBerg pq.Array 使用得当,即直接传递给 db.Exec 并使用 $1 而不是 fmt{%v} 确实 not 产生{[1,2,3,4,5]}。首先您可能想阅读 SQL 注入,然后您应该停止使用 fmt 和纯字符串插值来构建查询,最后尝试彻底遵循答案中的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多