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

在 PostgreSQL Gorm 中获取数据

在 PostgreSQL Gorm 中获取数据

Go
森林海 2022-11-23 19:56:55

我有我的模型如下:


package models


import "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贡献1595条经验 获得超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

添加回答

举报

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