go - GORM似乎是自己制造表名的

标签 go go-gorm

我有一个 gorilla /多线程站点,需要使用GORM进行数据库处理。
首先,我只是想像一个世界一样,看看我是否可以访问数据库。
因此,具有以下代码:

type user struct {
    user_id  int
    username string
    email    string
    pw_hash  string
}

func gormo(w http.ResponseWriter, r *http.Request) {

    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    var user user
    db.Find(&user)

    fmt.Println(user)

}
现在,数据库有一个名为user的表,我只想从中返回一些信息。运行此代码时,出现以下命令行错误:
no such table: users
[0.217ms] [rows:0] SELECT * FROM `users`
这很奇怪,我的代码中没有任何地方叫做“用户”,也不是我的数据库。
这是哪里来的?为什么GORM似乎把它放在那里?

最佳答案

您的数据库中还没有任何东西。好吧,无论如何,GORM不会创造任何东西。您需要先migrate。这将创建您的表。您可以这样做:

db.AutoMigrate(&user{})
另外,GORM更喜欢约定而不是配置,它更喜欢pluralizes table names by default。因此,一旦创建了表,其名称将为users
编辑:您可能需要通过大写名称来使结构及其字段在外部可见。

关于go - GORM似乎是自己制造表名的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66211442/

相关文章:

go - 使用 Websockets 向客户端广播服务器端消息

gorm 获取当前数据库连接

GORM协会

go - 更新 "jinzhu/gorm"pkg 中的行失败

json - 在 Go 中为导入的结构设置标签

go - 安装和使用 godef

json - 在 Go 中解码多个结构中的 json

mysql - 在 golang 中与 gorm 的一对多关系不起作用

go - 接口(interface)具有相同的方法,但被认为是不同的

go - 在 Go 中使用缓冲区进行读取和读取操作示例