8

I have a struct with a property time:

type Basket struct {  
  ...  
  Created_at time.Time `db:"created_at"`
}

with the time saved as:

basket.Created_at = time.Now().UTC()

If I save it using Insert sql statement, it saves the time nicely in the SQLite3 but when I select the desired record using:

ret_basket := Basket{}
err := database.DB.Get(&ret_basket, "SELECT id, ..., created_at FROM baskets WHERE user_id = ?", some_user_id)

It returns the record with other properties loaded properly except the time property which is ret_basket.Created_at as 0001-01-01 00:00:00 +0000 UTC

Any suggestions?

1 Answer 1

7

There is no official package for Sqlite so I assume you are using https://github.com/mattn/go-sqlite3 Probably your issue is result of wrong created_at field declaration in database which should be DATETIME because the next code works perfectly on my machine (I've removed all error checks):

package main

import (
    "github.com/jmoiron/sqlx"
    _ "github.com/mattn/go-sqlite3"
    "log"
    "time"
)

type Post struct {
    Id      int64     `db:"post_id"`
    Created time.Time `db:"created"`
}

func main() {
    db, _ := sqlx.Connect("sqlite3", "post_db.db")
    db.MustExec("DROP TABLE IF EXISTS posts; CREATE TABLE posts (post_id INT, created DATETIME);")

    p1 := Post{Id: 1, Created: time.Now().UTC()}
    p2 := Post{}

    tx := db.MustBegin()
    tx.NamedExec("INSERT INTO posts (post_id, created) VALUES (:post_id, :created)", &p1)
    tx.Commit()

    db.Get(&p2, "SELECT post_id, created FROM posts WHERE post_id = $1", p1.Id)
    log.Println(p2.Created.Format("2006-01-02"))
}
Sign up to request clarification or add additional context in comments.

Comments

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.