【问题标题】:Unable to read write information in postgres database via gorm无法通过 gorm 读取 postgres 数据库中的写入信息
【发布时间】:2021-09-09 19:11:36
【问题描述】:

我有这个 gorm sn-p 我正在尝试将数据写入/读取到 DB 中

主要功能

package main
import "studentDetails/gomodule/database"

// Connecting to database
if err := database.Open(); err != nil {
    fmt.Println("Unable to connect to DB", err)
}
fmt.Println("Connected to DB !!!")

defer database.Close()

database.WriteToDB()
data := database.GetAllFromDB()
fmt.Println("Data from DB", data)

数据库函数

package database
import (
    "fmt"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/postgres"
)

var DB *gorm.DB

type Student struct {
    Id          string `gorm:"type:varchar;primary_key;" json:"student_id"`
    Name        string `gorm:"type:varchar" json:"name"`
    PhoneNumber int    `gorm:"type:varchar" json:"phone_number"`
    EmailId     string `gorm:"type:varchar" json:"email_id"`
    Branch      string `gorm:"type:varchar" json:"branch"`
}

func Open() error {
    var err error
    DB, err = gorm.Open("postgres", "host=127.0.0.1 port=5433 user=postgres dbname=student password=postgres sslmode=disable")
    if err != nil {
        return err
    }
    return nil
}

func Close() error {
    return DB.Close()
}

func WriteToDB() {
    tempMap := Student{Branch: "ISE", EmailId: "chetan@gmail.com", Id: "1234", Name: "Chetan", PhoneNumber: 123456}
    result := DB.Model(&Student{}).Create(tempMap)
    fmt.Println("Data written in the database", result)
}

func GetAllFromDB() *gorm.DB {
    st := Student{}
    result := DB.Find(&st)
    return result
}

当我执行程序时,我确实看到数据库正在连接。但由于某种原因,我无法将数据读/写到表中(它确实说记录已更新但它没有)。 我还尝试手动插入带有值的表以检查 get 调用是否有效。这是输出:

Connected to DB !!!
Data written in the database &{{{0 0} 0 0 0 0} {1234 Chetan 123456 chetan@gmail.com ISE} using unaddressable value 0 0xc000088000 false 0 {0xc000113db0} 0xc0000d4160 {{0 0} {{map[gorm:started_transaction0xc00042e0780xc0001781c0:0xc00042e080] false}} map[] 0} 0xc0000b8270 <nil> 0xc000099120 false <nil>}
Data from DB &{{{0 0} 0 0 0 0} 0xc0000b7950 <nil> 1 0xc000088000 false 0 {0xc000113db0} 0xc0000d4840 {{0 0} {<nil>} map[] 0} 0xc0000b8270 <nil> 0xc000099600 false <nil>}

有人可以帮我指出我正在做的错误吗?谢谢。

【问题讨论】:

  • 作为调试的第一步,不要忽略来自DB.Model.CreateDB.Finderrors(或任何与此相关的错误)。

标签: go go-gorm


【解决方案1】:

首先尝试导入 gorm postgres 驱动程序,以防止使用字符串对大量配置进行硬编码 import "gorm.io/driver/postgres"

然后修改你的 Open() 函数,如下所示:

func Open() error {
    var err error
    connStr := "host=127.0.0.1 port=5433 user=postgres dbname=student password=postgres sslmode=disable"
    DB, err = gorm.Open(postgres.Open(connStr), &gorm.Config{})
    if err != nil {
        return err
    }
    return nil
}

将 WriteToDB 修改为如下所示

func WriteToDB() {
    tempMap := Student{Branch: "ISE", EmailId: "chetan@gmail.com", Id: "1234", Name: "Chetan", PhoneNumber: 123456}
    result := DB.Model(&Student{}).Create(&tempMap)
    fmt.Println("Data written in the database", result)
}

Create() 函数应该有一个指向您要持久保存到数据库的对象的指针。

但是我建议用这个替换整行 result := DB.Create(&amp;tempMap) 而不是 Calling DB.Model(&lt;pointer&gt;).Create(&lt;pointer&gt;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2014-06-14
    相关资源
    最近更新 更多