我决定使用gorm作为我的ORM。我想使用golang-migrate/migrate进行迁移,因为GORM似乎没有版本化的迁移文件。我宁愿使用CLI进行迁移,而不是使用自动迁移。
我看了gorm的文档,但是我没有看到gorm是如何把模型转换成SQL表的。有没有关于gorm生成的SQL表的示例或文档?(特别是类型或关联如何Map到SQL)
我决定使用gorm作为我的ORM。我想使用golang-migrate/migrate进行迁移,因为GORM似乎没有版本化的迁移文件。我宁愿使用CLI进行迁移,而不是使用自动迁移。
我看了gorm的文档,但是我没有看到gorm是如何把模型转换成SQL表的。有没有关于gorm生成的SQL表的示例或文档?(特别是类型或关联如何Map到SQL)
5条答案
按热度按时间w8ntj3qf1#
我看了gorm的文档,但是我没有看到gorm是如何把模型转换成SQL表的。有没有关于gorm生成的SQL表的例子或文档?(特别是类型或关联如何Map到SQL)
查看“声明型号”段落:
列数据类型,最好使用兼容通用类型,例如:bool、int、uint、float、string、time、bytes,适用于所有数据库,可与其他标签一起使用,如not null、size、autoIncrement...也支持指定的数据库数据类型,如varbinary(8),使用指定的数据库数据类型时,需要是完整的数据库数据类型,例如:介质INT未签名非空AUTO_INCREMENT
比如说
👉🏻 同样,请看Customize Data Types段落。
w8f9ii692#
在golang-migrate/migrate中,你应该为每个版本编写升级/降级迁移版本的up和down SQL脚本,你不能使用gorm来生成这些文件。
你应该保持你的gorm模型与迁移脚本手动同步。
7y4bm7vi3#
几年前我刚开始使用Gorm的时候,我一直在寻找类似于你所寻找的东西。我最终使用了一个名为goose(https://github.com/pressly/goose)的包来创建迁移文件,并从CLI运行迁移。它实际上运行得非常好。基本上,在你的
up
和down
函数上,你可以使用gorm的内置迁移函数(https://gorm.io/docs/migration.html)。下面是一个使用gorm的goose迁移文件的示例。
Fyi
db.Get()
得到一个gorm数据库。mhd8tkvw4#
哦,我明白了,因为我也是新来的,如果你从框架中迁移过来,比如laravel或django,...你会觉得你可以在另一个应用程序中设计方案,比如https://dbdiagram.io/home和导出sql
twh00eeo5#
有一个黑客的方法可以从Gorm自动迁移中获取SQL代码。你可以在Gorm创建的阶段将你的记录器注入到Gorm中(见文档),然后在所有模型更改后编译你的应用。不要忘记为记录器设置Info严重性。然后自动迁移SQL应该在记录器输出中。然后你需要复制粘贴它来迁移文件。