簡體   English   中英

GORM 中根本就沒有遷移文件嗎?

[英]Is there no migration file at all in GORM?

如果我使用 GORM,沒有遷移文件?? 到目前為止,我用谷歌搜索並搜索了這些信息,根據我的理解,GORM 中沒有遷移文件,如果我想生成一個遷移文件,我必須使用 CLI。 GORM 沒有生成遷移文件的原因是“它不會刪除未使用的列來保護您的數據”。 ( https://gorm.io/docs/migration.html#Auto-Migration )

我們如何跟蹤變化? 在Django,它生成了一個遷移文件,我們可以隨時了解遷移的變化。

提前,如果我理解有誤,我很抱歉......我前幾天才開始學習golang和數據庫。

我相信GORM沒有您想要的解決方案。 有一些來自GORM團隊和其他愛好者的CLI ,但他們確實沒有做我們真正想要的(是的,我也需要同樣的工具)。 歸根結底,在使用GORM的情況下,只有GIT是朋友。

PS 我在Facebook's Ent (Go 的實體框架)中找到了一個很好的解決方案,這是與 Go 中的 DB 交互的一個更好的選擇。他們有一個內置的解決方案來滿足您的需求 - WriteTo function 將架構更改寫入f而不是針對數據庫運行它們。

func main() {
    client, err := ent.Open("mysql", "root:pass@tcp(localhost:3306)/test")
    if err != nil {
        log.Fatalf("failed connecting to mysql: %v", err)
    }
    defer client.Close()
    ctx := context.Background()
    // Dump migration changes to an SQL script.
    f, err := os.Create("migrate.sql")
    if err != nil {
        log.Fatalf("create migrate file: %v", err)
    }
    defer f.Close()
    if err := client.Schema.WriteTo(ctx, f); err != nil {
        log.Fatalf("failed printing schema changes: %v", err)
    }
}

或者您可以通過將os.Stdout設置為WriteTo的目標 output 位置來簡單地將更改打印到終端。

client.Schema.WriteTo(ctx, os.Stdout)

參考 | 數據庫遷移 - 離線模式

我希望,這將幫助您在下次使用Ent時有更好的選擇,Ent 由Facebook根據其需求和規模創建、開源和維護。 此外,您可能對 Ariel Mashraki 的帖子感興趣 - Introducing ent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM