Postgresql sql:列索引2上的扫描错误,名称为“;“在”上创建:正在转换驱动程序。值类型时间。时间
我质疑的方式是:Postgresql sql:列索引2上的扫描错误,名称为“;“在”上创建:正在转换驱动程序。值类型时间。时间,postgresql,go,go-gorm,Postgresql,Go,Go Gorm,我质疑的方式是: package models import ( "fmt" "log" "github.com/jinzhu/gorm" //postgres dv _ "github.com/jinzhu/gorm/dialects/postgres" "ginstatus/pkg/setting" ) var db *gorm.DB type Model struct { ID int `gorm:"prim
package models
import (
"fmt"
"log"
"github.com/jinzhu/gorm"
//postgres dv
_ "github.com/jinzhu/gorm/dialects/postgres"
"ginstatus/pkg/setting"
)
var db *gorm.DB
type Model struct {
ID int `gorm:"primary_key" json:"id"`
CreatedOn int `json:"created_on"`
ModifiedOn int `json:"modified_on"`
}
func init() {
var (
err error
dbType, dbName, user, password, host, port, tablePrefix string
)
sec, err := setting.Cfg.GetSection("database")
if err != nil {
log.Fatal(2, "Fail to get section 'database': %v", err)
}
dbType = sec.Key("TYPE").String()
dbName = sec.Key("NAME").String()
user = sec.Key("USER").String()
password = sec.Key("PASSWORD").String()
host = sec.Key("HOST").String()
port = sec.Key("PORT").String()
tablePrefix = sec.Key("TABLE_PREFIX").String()
db, err = gorm.Open(dbType, fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s",
host,
port,
user,
dbName,
password))
// db, err = gorm.Open("postgres", "host=192.168.2.200 port=5433 user=czxsql dbname=go_blog password=123456")
if err != nil {
log.Println(err)
}
//##############################
// db.LogMode(true)
//##############################
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
return tablePrefix + defaultTableName
}
db.SingularTable(true)
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
}
func CloseDB() {
defer db.Close()
}
/数据库数据信息
我的结果
"lists":[{"id":1,"created_on":0,"modified_on":0,"name":"czxtable","created_by":"","modified_by":"","state":0}]
以上是postgresql查询错误
我的数据库时间字段类型“timestamp”
我正在使用“github.com/jinchu/gorm”查询数据库,但查询结果为“0”
当我查询时应该怎么做,我能得到正确的时间格式吗
附言:
只有mysql处理,但没有postgresql处理
抱歉,给您带来更多麻烦,提前感谢您的帮助。您能显示
标记
结构的定义吗?您还需要显示模型
,因为问题是在上创建的,而该问题在标记
中不直接出现。是,问题是您正在使用int
作为时间戳字段的Go类型。DB时间戳无法自动解码为int
。您应该使用time.time
for You Go timestamp字段。或者,您应该将DB列类型从时间戳更改为整数。或者您需要一个自定义的Goint
类型,它知道如何解码DB时间戳。如果您查看默认的gorm.Model
类型,您可以看到它们也使用time.time
作为时间戳字段。为此,您需要声明一个自定义时间戳类型并实现json.Marshaler
接口。下面是一个例子:。但是,如果这样做,可能会中断与数据库之间的编码/解码,因此,您可能还需要自定义时间戳来实现驱动程序.Valuer
和sql.Scanner
接口。您可以显示标记
结构的定义吗?您还需要显示模型
,因为问题是在标记
中不直接存在的上创建的问题。是的,问题是您正在使用int
作为时间戳字段的Go类型。DB时间戳无法自动解码为int
。您应该使用time.time
for You Go timestamp字段。或者,您应该将DB列类型从时间戳更改为整数。或者您需要一个自定义的Goint
类型,它知道如何解码DB时间戳。如果您查看默认的gorm.Model
类型,您可以看到它们也使用time.time
作为时间戳字段。为此,您需要声明一个自定义时间戳类型并实现json.Marshaler
接口。下面是一个例子:。但是,如果这样做,可能会中断与数据库之间的编码/解码,因此您可能还需要自定义时间戳来实现driver.Valuer
和sql.Scanner
接口。
"lists":[{"id":1,"created_on":0,"modified_on":0,"name":"czxtable","created_by":"","modified_by":"","state":0}]
sql: Scan error on column index 2, name "created_on": converting driver.Value type time.Time ("2019-11-09 18:33:14.923411 +0000 +0000") to a int: invalid syntax