使用Golang中的lib/pq和PostgreSQL创建一个动态的更新语句

3

当用户成功提交用户详细信息后,我会从客户端收到一个JSON。

由于某些元素未被更新,因此可以跳过JSON中的某些元素。

在Golang服务器端,我定义了一个等效的结构体。

服务器成功将JSON字节组合成结构体。

type user struct {
    Id       *int64  `json:",omitempty"`
    Name     *string `json:",omitempty"`
    Age      *int64  `json:",omitempty"`
}

如何根据可用的JSON元素创建动态更新语句?

例如,我可能只获取Id和Age。如何动态创建更新语句,例如 update user set age = $1 where id = $2 另一次可能是Id和Name。


那么ID可以为空吗?这对我来说很奇怪;你怎么知道要更新什么。 - RickyA
1个回答

2

如果您不想使用ORM,可以尝试使用SQL生成器,例如Squirrel,并在修改SQL语句之前检查每个参数:

import (
    sq "github.com/lann/squirrel"
    "fmt"
)

statement := sq.Update("user").Where(sq.Eq{"Id": &u.Id})
if &u.Name != nil {
    statement = statement.Set("Name", "Jack")
}
sql, args, err := statement.ToSql()
fmt.Println(sql)

在某些情况下,您可能需要首先查询数据库以确保输入数据没有试图将列“Name”显式设置为null(例如update user set Name = null ...)。
另一种方法是使用类似ORM的软件包,如gorpgorm,两者都应正确处理SQL更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接