Golang lib / pq postgresql创建动态更新语句

时间:2014-08-02 01:29:24

标签: json postgresql go sql-update

我从客户端获得了成功提交用户详细信息的JSON。

JSON中的某些元素可以跳过,因为它们没有更新。

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

服务器成功地将JSON字节封送到结构中。

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

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

例如,我可能会单独获得Id和年龄。 如何动态创建更新语句,如update user set age = $1 where id = $2 另一次可能是Id和Name。

感谢您的回复。

1 个答案:

答案 0 :(得分:1)

如果您不想使用ORM,请尝试使用Squirrel之类的SQL生成器,并在修改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 ...)。

另一种方法是使用像gorpgorm这样的'ORM-ish'软件包,两者都应该正确处理sql更新。