[英]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.