drhanjuw56233
2019-06-22 18:23
浏览 86
已采纳

如何将sqlx查询结果转换为结构数组?

I am trying to query all the results from a postgres table without where condition and map it with array of structs with the help of sqlx db Query by passing the args ...interface {}.

But the code pasted below never works, Instead of iterating and scanning the result one by one , is it possible to get the following code work ??

Inputs are much appreciated . Thank you

type CustomData struct {
    ID                        string `db:"id" json:",omitempty"`
    Name                      string `db:"name" json:",omitempty"`
    Description               string `db:"description" json:",omitempty"`
    SourceID                  string `db:"sourceid" json:",omitempty"`
    StatusID                  string `db:"statusid" json:",omitempty"`
    StatusReason              string `db:"statusreason" json:",omitempty"`
    CreateTime                string `db:"createtime" json:",omitempty"`
    UpdateTime                string `db:"updatetime" json:",omitempty"`
}

var myData []CustomData

*sqlx.DB.Query("SELECT id as ID,  name as Name, description as Description, sourceid as SourceID, statusid as StatusID, statusreason as StatusReason, createtime as CreateTime, updatetime as UpdateTime FROM myschema.my_table", &myData)

// tried with following statement but din't work either
// *sqlx.DB.Query("SELECT * FROM myschema.my_table", &myData)

    for _, data := range myData {
        fmt.Println("--", data)
    }

Expected results:

--- CustomData{1,x,x,x,x} --- CustomData{2,x,x,x,x}

Actual: Nothing..

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongzhimeng2464 2019-06-23 19:07
    已采纳
    1. You don't need to rename the fields in the query, since you're defining the actual DB fields in the struct tags.

    2. If you want to scan directly to the slice of CustomData and if you are using SQLX, you should use the SQLX specific Select method, rather than the generic SQL Query. Slightly modified relevant example from the illustrated guide to SQLX (https://jmoiron.github.io/sqlx/#getAndSelect):

        pp := []Place{}
        err = db.Select(&pp, "SELECT * FROM place")
    

    So in your case:

        myData := []CustomData
        err = db.Select(&myData, "SELECT * FROM myschema.my_table")
    
    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题