Gorm迁移使用golang migrate/migrate



我决定使用gorm作为我的ORM。我想使用golangmigrate/migrate进行迁移,因为看起来GORM没有版本化的迁移文件。我更愿意使用CLI进行迁移,而不是使用自动迁移。

我阅读了gorm文档,但没有看到gorm如何将模型转换为SQL表。有没有关于gorm生成的SQL表的示例或文档??(尤其是类型或关联如何映射到SQL)

几年前我刚开始使用Gorm时,我正在寻找与您所寻找的类似的东西。我最后用了一个叫鹅的包裹(https://github.com/pressly/goose)以创建迁移文件并从CLI运行迁移。它实际上运行得非常好。基本上,在updown函数上,您可以使用gorm的内置迁移函数(https://gorm.io/docs/migration.html)。

下面是一个使用gorm的鹅迁移文件的示例。

package main
import (
"database/sql"
"encoding/json"
"my-api/internal/pkg/db"
"time"
"my-api/internal/pkg/private/models"
"github.com/pressly/goose"
)
func init() {
goose.AddMigration(Up00007, Down00007)
}
type Event struct {
models.DefaultModel
VenueID        uint            `gorm:"not null"`
Tags           json.RawMessage `gorm:"not null;type:json" sql:"type:json"`
Name           string          `gorm:"not null"`
Details        string          `gorm:"not null"`
Picture        string          `gorm:"not null"`
StartDate      time.Time
EndDate        time.Time
}
func Up00007(tx *sql.Tx) error {
// This code is executed when the migration is applied.
return db.Get().CreateTable(&Event{}).Error
}
func Down00007(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return db.Get().DropTable(&Event{}).Error
}

Fyidb.Get()得到一个gorm数据库。

Atlas支持GORM的自动迁移规划。

使用Atlas,您可以从GORM模型中自动生成版本化迁移。您可以使用Atlas以Atlas的格式生成迁移以应用,或者如果您想使用golang-migrate,Atlas也可以使用该格式生成。

干杯,

(完全披露:我是作者之一)

阅读了gorm文档,但我没有看到gorm如何将模型转换为SQL表。有没有关于gorm生成的SQL表的示例或文档??(尤其是类型或关联如何映射到SQL)

查看申报模型段落:

列数据类型,更喜欢使用兼容的通用类型,例如:bool、int、uint、float、string、time、bytes,适用于所有数据库,并且可以与其他标签一起使用,如not null、size、autoIncrement…也支持指定的数据库数据类型,如varbinary(8),当使用指定的数据库类型时,它需要是完整数据库数据类型,例如:MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT

例如

type Post struct {
ID     uuid.UUID `gorm:"type:uuid;default:uuid_generate_v4()"`
Title  string
Tags   pq.StringArray `gorm:"type:text[]"`
}

另外,请参阅"自定义数据类型"一段。

在gorm中,没有从模型自动生成SQL的直接解决方案。在golangmigrate/migrate中,您应该为升级/降级迁移版本的每个版本编写上下SQL脚本,而不能使用gorm来生成这些文件。

您应该手动同步您的gorm模型和迁移脚本。

有一种从Gorm自动迁移中获取SQL代码的方法。您可以在Gorm的创建阶段将记录器注入其中(请参阅文档),然后在所有模型更改后编译您的应用程序。不要忘记为记录器设置信息严重性。然后自动迁移sql应该在记录器输出中。然后,您需要复制粘贴它来迁移文件。

哦,我明白了,因为我也是go的新手,如果你从laravel或django这样的框架迁移过来。。。你感觉到了您可以在其他应用程序中设计方案,如https://dbdiagram.io/home并导出sql

最新更新