繁体   English   中英

在 golang 中使用 map[string]interface{} 输入为 postgresql 创建动态查询

Create dynamic query for postgresql in golang with map[string]interface{} input

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有 map[string]interface 输入用户,如下所示

user := map[string]interface{}{
       "firstname": firstname,
       "lastname":  lastname,
       "country":   country,
       "email":     email,
   }

上面给出的值来自其他函数作为变量,因此未在“”中表示。

比如我需要从上面的界面生成如下动态查询: "INSERT INTO USERTABLE (key1, key2, key3, key4) VALUES ($1, $2, $3, $4) RETURNING userid", val1, val2, val3, val4)

迭代器将计算键和值并生成如下查询

"INSERT INTO USERTABLE (firstname, lastname, country, email) VALUES ($1, $2, $3, $4) RETURNING userid", firstname, lastname, country, email)

希望建立一个动态字符串。

1 个回复

纯Go

func prepareInsert(table string, params map[string]interface{}) string {
    columns := len(params)
    fieldSlice := make([]string, 0, columns)
    for field, _ := range params {
        fieldSlice = append(fieldSlice, field)
    }
    fields := strings.Join(fieldSlice, ",")

    placeholders := prepareQueryPlaceholders(1, columns)
    return fmt.Sprintf(`INSERT INTO %s (%s) VALUES (%s) RETURNING %s`, table, fields, placeholders, fields)
}

func prepareQueryPlaceholders(start, quantity int) string {
    placeholders := make([]string, 0, quantity)
    end := start + quantity
    for i := start; i < end; i++ {
        placeholders = append(placeholders, strings.Join([]string{"$", strconv.Itoa(i)}, ""))
    }
    return strings.Join(placeholders, ",")
}

操场

1 Golang中的Postgresql动态查询构建

如何根据我拥有/获取的参数构建动态UPDATE查询? 仅当参数值不为空时才需要更新列。 这是我的代码: 因此,基本要求是仅在适当的Input值不为null时更新列。 更新: 仅当参数不为空时,GetRow函数中的查询才会在WHERE子句中包含条件。 因此,我不 ...

3 Golang Gorm 使用 map 字符串接口动态创建用户不起作用

我正在动态构建一个 map[string]interface{} 以从导入的 CSV 文件创建用户。 map 在我打印时看起来还不错,但是当我想用 Gorm 创建它(添加到我的数据库中)时出现错误。 我收到的错误是: """" 处或附近的零长度分隔标识符我还激活了 Gorm 调试器并输出: ← ...

5 如何检查接口是golang中的map [string]字符串

我想检查输出变量是否为map [string]字符串。 输出应该是map [string]字符串,它应该是ptr。 我检查了ptr值。 但我不知道如果是字符串与否,如何检查地图的关键。 对不起,我的英语不好 ...

8 Golang在map [string] interface {}数据上实现分页

我有一个json文件(嵌套json),正在将其内容编组到map [string]接口中。 现在,由于数据量很大,我必须实现分页。 客户端将发送所需的页面作为查询参数,我该如何切片我拥有的数据? 这是我正在处理的数据的摘要: 因此,我要做的是递归地遍历数据,并创建了一个自定义类型的数 ...

9 golang json unmarshal map of map [string] interface {}

我有以下代码尝试解组这个json文件,但行json.Unmarshal([] byte(msg [“restaurant”]),&restaurant)总是出错。 如何让Unmarshal忽略“餐馆”或仅将“餐馆”数据传递给Unmarshal功能? 谢谢! ...

2014-04-23 15:51:39 3 35863   json/ go
10 在 Golang 中向嵌套的 map[string]interface{} 添加属性

我正在处理map[string]interface{}类型的数据。 它可以在 (map[string]interface{}) 类型中包含无限数量的嵌套对象。 编辑:此数据来自 mongodb。 我不能在这里真正应用 golang 的结构,因为属性因文档而异。 我要做的就是获取嵌套最深的 objec ...

2019-10-20 15:07:29 2 51   go
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM