【问题标题】:How to create something in PostgreSQL Database [duplicate]如何在 PostgreSQL 数据库中创建一些东西 [重复]
【发布时间】:2019-07-28 23:09:22
【问题描述】:

我正在学习使用 PostgreSQL 和 GORM。我正在创建一个结构,连接到数据库,并尝试写入数据库。

源代码:

db, err := gorm.Open("postgres","user=superuser password=ojcafizp123 dbname=gorm sslmode=disable")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    database := db.DB()

    err = database.Ping()

    if err != nil {
        panic(err.Error())
    }

    fmt.Println("Connection to PostgreSQL was successful!")

    port := ":3000"
    r := chi.NewRouter()
    r.Get("/api/test",Test)
    http.ListenAndServe(port, r)
}



func CreateRate (w http.ResponseWriter, r *http.Request) {
    db, err := gorm.Open("postgres","user=superuser password=ojcafizp123 dbname=gorm sslmode=disable")
    cure := Crypto{"BTC","USD",10000,100}
    if db.NewRecord(cure) {
        err = db.Create(&cure).Error
        if err != nil{
            panic(err.Error())

        }
    }
}

结构:

type Crypto struct {
    Cur1 string `json:"cur1"`
    Cur2 string `json:"cur2"`
    Rate float64 `json:"rate"`
    Timestamp int64 `json:"timestamp"`
}

试图在数据库中找到我的记录:

func Test (w http.ResponseWriter, r *http.Request) {
    db, err := gorm.Open("postgres","user=superuser password=ojcafizp123 dbname=gorm sslmode=disable")
    var testcur Crypto
    db.First(&testcur)
    fmt.Println(testcur)
    if err != nil {
        fmt.Println("No testcur detected")
    }

}

但是得到了这个:

与 PostgreSQL 的连接成功! {0 0}

(/home/superuser/go/src/CryptoProject/main.go:97) [2019-07-27 05:09:10] pq:关系“cryptos”不存在

连接正常,但底座仍然是空的。

【问题讨论】:

  • 只是添加到@khampson 的答案中,您实际上并没有调用CreateRate,因此即使您创建了表,而没有先向其中插入一些东西,Test 仍然会失败。还有一件事,你在Test 处理程序中处理错误的方式是错误的,首先你忽略了从Open 返回的错误,然后,当你调用First 时,而不是检查是否产生了错误您检查从Open 返回的那个。

标签: postgresql go crud


【解决方案1】:

错误是说表cryptos当前不存在,这就是插入不起作用并且数据库中没有任何内容的原因。

我以前没有专门使用过GORM,但是如果它与其他ORM 类似,则需要创建一个表示表的数据模型,然后它可以使用该模型创建表。对其文档的快速浏览显示 GORM 有一个名为 CreateTable 的函数,可以针对 Model 调用该函数。

您还可以通过 psql 等工具使用常规 SQLGORM 之外创建表。

【解决方案2】:

除了@khampson,您还可以使用AutoMigrate 功能:

type Product struct {
  gorm.Model
  Code string
  Price uint
}

// Migrate the schema
db.AutoMigrate(&Product{})

Full example.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多