为了账号安全,请及时绑定邮箱和手机立即绑定

在 PostgreSQL Gorm 中获取数据

在 PostgreSQL Gorm 中获取数据

Go
森林海 2022-11-23 19:56:55
我有我的模型如下:package modelsimport "github.com/lib/pq"type Guild struct {    Id               string         `json:"id" gorm:"primaryKey"`    DefaultBitrate   int            `json:"defaultBitrate"`    DefaultState     string         `json:"defaultState"`    DefaultCategory  string         `json:"defaultCategory"`    DefaultUserLimit int            `json:"defaultUserLimit"`    HelpChannel      string         `json:"helpChannel"`    Generators       pq.StringArray `json:"generators" gorm:"type:text[]"`    Channels         pq.StringArray `json:"channels" gorm:"type:text[]"`}函数文件:func (h handler) CreateGuild(guildid string) error {    guild := &models.Guild{        Id:             guildid,        DefaultBitrate: "64",    }    if result := h.DB.Create(&guild); result.Error != nil {        return result.Error    }    return nil}func (h handler) GetGuild(guildid string) (models.Guild, error) {    var guild models.Guild    if result := h.DB.First(&guild, guildid); result.Error != nil {        return guild, result.Error    }    return guild, nil}所以我所做的是先创建一个公会,然后尝试使用相同的 ID 获取它,但我没有在控制台中记录任何内容Database := db.Init()    h := dbhandlers.New(Database)    data, err := h.GetGuild("71728137382983743892")    fmt.Print(data.DefaultBitrate)Github:https ://github.com/apidev234/abred注意:我已经这样创建了公会: err := h.CreateGuild("71728137382983743892")调试:2022/03/24 13:37:23 /Users/gaurish/Desktop/Coding/TempVC-Bot/database/handlers/Functions.go:12 SLOW SQL >= 200ms[1126.461ms] [rows:1] INSERT INTO "guilds" ("id","default_bitrate","default_state","default_category","default_user_limit","help_channel") VALUES ('ASDHA','64','','',0,'')2022/03/24 13:37:44 /Users/gaurish/Desktop/Coding/TempVC-Bot/database/handlers/Functions.go:19 ERROR: column "asdha" does not exist (SQLSTATE 42703)[229.439ms] [rows:0] SELECT * FROM "guilds" WHERE ASDHA ORDER BY "guilds"."id" LIMIT 1
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

使用First非数字主键时,您需要明确指定要与主键匹配的列。


官方文档:


如果主键是字符串(比如uuid),查询会写成这样:


db.First(&user, "id = ?", "1b74413f-f3b8-409f-ac47-e8c062e3472a")

// SELECT * FROM users WHERE id = "1b74413f-f3b8-409f-ac47-e8c062e3472a";

所以在GetGuild这个:


h.DB.First(&guild, guildid)

应该是这样的:


h.DB.First(&guild, "id = ?", guildid)


查看完整回答
反对 回复 2022-11-23
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信