我可以知道如何在Postgresql中存储time.time
对象吗?
例如,SQL查询:
INSERT INTO "UserAccount" ("email", "login_time") VALUES ('human@example.com', 2017-12-12 00:58:26.9589451 +0800 +08 m=+1406.914186601)
我尝试使用loginTime := time.Now()
,它提供了Postgresql不太了解的时间格式,例如 2017-12-12 00:58:26.9589451 +0800 +08 m = + 1406.914186601
但是如果我尝试使用loginTime := time.Now().Format(time.RFC3339)
,并且编译器抱怨loginTime
是string
,我需要它time.time
类型。
我可以知道如何处理这个问题吗?
很抱歉提出新手问题,Golang和Postgres都是新手。 :)
答案 0 :(得分:6)
您应该使用带有占位符参数的sql#DB.Exec(...)
,而不是手动构建查询字符串,以便数据库驱动程序正确地为您转义值。这样做是最好的做法,特别是为了避免SQL injection等安全错误。
email, loginTime := "human@example.com", time.Now()
result, err := db.Exec("INSERT INTO UserAccount VALUES ($1, $2)", email, loginTime)
if err != nil {
panic(err)
}
答案 1 :(得分:2)
pq驱动程序(我假设您正在使用)会自动为您正确转换time.Time实例。
所以,你可以这样做:
db.Exec(`INSERT INTO "UserAccount" ("email", "login_time") VALUES ($1, $2)`,"human@example.com",time.Now())