如何在golang中使用GORM在数据库之间切换?

我是 golang 的 GORM 新手。我被困在一个点上。通常我们选择这样的数据库: DBGorm, err = gorm.Open("mysql", user:password@tcp(host:port)/db_name)
但我的问题是我会在请求中得到'db_name',它意味着我不知道可能会出现哪个 db_name,我将不得不根据该 db_name 进行查询。所以现在,我将在 init 函数中创建数据库指针,如下所示: DBGorm, err = gorm.Open("mysql", user:password@tcp(host:port)/)没有 db_name。

现在我将如何切换到 db_name 来请求我。因为当我尝试做DBGorm.Create(&con)时,它显示No database selected

如果我使用'database/sql',那么我可以像这样进行原始查询:“SELECT * FROM db_name.table_name”,这可以解决我的问题。但是如何在gorm中做到这一点?


紫衣仙女
浏览 1002回答 2
2回答

蛊毒传说

我在 Github 上看到了一篇相关的文章。https://github.com/go-sql-driver/mysql/issues/173#issuecomment-427721651你需要做的就是开始交易,设置你的数据库运行您想要的查询。并切换回您想要的数据库完成后提交。下面是一个例子tx := db.Begin() // start transactiontx.Exec("use " + userDB) // switch to tenant dbtx.Exec("insert into ....") // do some worktx.Exec("use `no-op-db`") // switch away from tenant db (there is no unuse, so I just use a dummy)tx.Commit() // end transaction

蝴蝶刀刀

您可以在对表进行查询或其他操作时显式指定db_name和table_name使用。.Table()DBGorm.Table("db_name.table_name").Create(&con)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go