4

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 Answers 2

8
  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")
Sign up to request clarification or add additional context in comments.

Comments

1

you can use the following:

for rows.Next() {
    s := CustomData{}
    if err := rows.Scan(&s); err != nil {
        return err
    }
    fmt.Println(s)
}

and you can always use ORM library as gorm if you like code first approach or sqlboiler if you like DB first approach

1 Comment

Thank you for the response, however am getting following error while scanning , s:"sql: expected 8 destination arguments in Scan, not 1" . Can you please let me know what am doing wrong ? Thank you

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.