使用go-sqlx库怎么批量更新

yz23je · 2023-05-27 19:14:02 · 3326 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-05-27 19:14:02 的主题,其中的信息可能已经有所发展或是发生改变。

UPDATE "dd"."number" SET number_val=? WHERE id=?

已经定义了一个var number_info []numberType的切片,数据也已经放进去了

number_info[0].number_val = 123

number_info[0].id = 8

number_info[1].number_val = 99

number_info[1].id = 10

我想批量更新要怎么处理呢,库用的是sqlx,查了很久没找到 应该不需要使用for循环来一条一条组合的执行吧

数据库使用的是postgresql


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3326 次点击  
加入收藏 微博
2 回复  |  直到 2023-06-23 10:08:09
will0523
will0523 · #1 · 2年之前
personStructs := []Person{
    {FirstName: "Ardie", LastName: "Savea", Email: "asavea@ab.co.nz"},
    {FirstName: "Sonny Bill", LastName: "Williams", Email: "sbw@ab.co.nz"},
    {FirstName: "Ngani", LastName: "Laumape", Email: "nlaumape@ab.co.nz"},
}

_, err = db.NamedExec(`INSERT INTO person (first_name, last_name, email)
    VALUES (:first_name, :last_name, :email)`, personStructs)

然后使用ON duplicate KEY UPDATE试试

laojke
laojke · #2 · 2年之前

可以试一下sqlx.in

func (u User) Value() (driver.Value, error) {
    return []interface{}{u.Name, u.Age}, nil
}
 query, args, _ := sqlx.In(
        "INSERT INTO user (name, age) VALUES (?), (?), (?)",
        users..., // 如果arg实现了 driver.Valuer, sqlx.In 会通过调用 Value()来展开它
    )
    fmt.Println(query) // 查看生成的querystring
    fmt.Println(args)  // 查看生成的args
    _, err := DB.Exec(query, args...)
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传