首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gorm迁移使用golang-迁移/迁移

Gorm迁移使用golang-迁移/迁移
EN

Stack Overflow用户
提问于 2020-10-24 04:50:19
回答 5查看 2K关注 0票数 11

我决定使用戈姆作为我的ORM。我想使用戈朗-迁移/迁移进行迁移,因为看起来GORM没有版本化的迁移文件。我宁愿使用CLI进行迁移,也不愿使用自动迁移。

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

EN

回答 5

Stack Overflow用户

发布于 2021-08-31 08:42:26

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

请看申报模型段落:

列数据类型,更喜欢使用兼容的通用类型,例如: bool、int、uint、浮起、字符串、时间、字节,这些类型适用于所有数据库,可以与其他标记一起使用,如null、size、autoIncrement…。指定的数据库数据类型(如var二进制(8))也支持,当使用指定的数据库数据类型时,它需要是一个完整的数据库数据类型,例如: MEDIUMINT无符号非空AUTO_INCREMENT

例如

代码语言:javascript
运行
复制
type Post struct {
  ID     uuid.UUID `gorm:"type:uuid;default:uuid_generate_v4()"`
  Title  string
  Tags   pq.StringArray `gorm:"type:text[]"`
}

另外,请看自定义数据类型段落。

票数 0
EN

Stack Overflow用户

发布于 2022-05-16 04:40:17

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

您应该使用手动同步迁移脚本来保持gorm模型同步。

票数 0
EN

Stack Overflow用户

发布于 2022-08-10 23:10:52

当我几年前第一次开始使用Gorm时,我正在寻找类似于您正在寻找的东西。最后,我使用了一个名为goose (https://github.com/pressly/goose)的包来创建迁移文件,并从CLI运行迁移。实际上效果很好。基本上,在updown函数上,您可以使用gorm的内置迁移函数(https://gorm.io/docs/migration.html)。

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

代码语言:javascript
运行
复制
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
}

Fyi db.Get()获得一个gorm数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64510093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档