dousi8237 2016-01-02 18:03
浏览 37
已采纳

用gorm编写鹅围棋迁移

A default goose go migration prepares a function providing an *sql.Tx:

A transaction is provided, rather than the DB instance directly, since goose also needs to record the schema version within the same transaction. Each migration should run as a single transaction to ensure DB integrity, so it's good practice anyway.

I would like to write my migration using gorm migrations, but I’m not sure how to use the given transaction to that purpose. Here’s an example:

func Up_20151230135812(txn *sql.Tx) {
  txn.CreateTable(&User{})
}

The build gives me txn.CreateTable undefined (type *sql.Tx has no field or method CreateTable) as expected. How can I grab the transaction for use with gorm?

  • 写回答

1条回答 默认 最新

  • doupa9062 2016-01-02 21:09
    关注

    goose know nothing about gorm and his functions (CreateTable etc.)

    Look at the end of goose / lib / goose / migration_go.go

    goose just create transaction

    db, err := goose.OpenDBFromDBConf(&conf)
    if err != nil {
        log.Fatal("failed to open DB:", err)
    }
    defer db.Close()
    
    txn, err := db.Begin()
    if err != nil {
        log.Fatal("db.Begin:", err)
    }
    
    {{ .Func }}(txn)
    
    err = goose.FinalizeMigration(&conf, txn, {{ .Direction }}, {{ .Version }})
    if err != nil {
        log.Fatal("Commit() failed:", err)
    }
    

    and use sql.Tx from "database/sql" package

    but you can implement custom wrapper using gorm ;-)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据