如何将多个值插入数据库

时间:2019-03-07 07:46:03

标签: postgresql go

在我的Go应用程序中,我有这样的路线

router.HandleFunc("/api/users_groups_relationship/{user_id:[0-9]+}", controllers.CreateUsersGroupsRelationship).Methods("POST")

我发出 POST 请求。在该请求的主体中,我发送了如下所示的JSON:

{
    "groups": [1, 2, 3] 
}

如您所见,groups键具有ID数组作为值。用户可以分为几个组。我正在尝试向PostgreSQL数据库插入多个值。

  1. 如何获取请求正文中特定键的值?

  2. 还有其他最好的方法可以通过Go在数据库中插入多个值吗?

我的代码:

var CreateUsersGroupsRelationship  = func(responseWriter http.ResponseWriter, request *http.Request) {
    vars := mux.Vars(request)

    userID := vars["user_id"]

    fmt.Println(userID)

    var groups []int

    groups = request.Body("groups") // ???

    for i := 1; i < len(groups); i++ {
        fmt.Println(groups[i])
        _, _ := database.DBSQL.Exec("INSERT INTO users_groups (user_id, group_id) VALUES ($1, $2);", userID, groups[i])
    }

    utils.ResponseWithSuccess(responseWriter, http.StatusOK, "All new records successfully created.")
}

1 个答案:

答案 0 :(得分:2)

您可以为Request对象定义一个结构,然后将JSON解组到其中。

package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "net/http"
    "encoding/json"
)

//Request is our request body.
type Request struct {
    Groups []int `json:"groups"`
}

//JsonTest1 is the http handler.
func JsonTest1(w http.ResponseWriter, r *http.Request) {
    req := new(Request)
    //decode request to struct.
    if err := json.NewDecoder(r.Body).Decode(&req); err != nil{
        w.WriteHeader(400) //bad request
    }

    w.WriteHeader(200)
    b, _ := json.Marshal(req)
    w.Write(b)
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
}

func main(){
    fmt.Printf("starting backend server\n")

    root := mux.NewRouter()
    root.HandleFunc("/foo", JsonTest1)

    webServer := &http.Server{Addr: ":4000", Handler: root}

    webServer.ListenAndServe()
}

如果您的身体很普通,也可以取消映射[string] interface {}的编组。

尝试

curl -XPOST -d '{"groups": [1]}' http://localhost:4000/foo
相关问题