为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
紫衣仙女 2022-06-21 10:19:09
我是 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中做到这一点?
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我在 Github 上看到了一篇相关的文章。https://github.com/go-sql-driver/mysql/issues/173#issuecomment-427721651

你需要做的就是

  1. 开始交易,

  2. 设置你的数据库

  3. 运行您想要的查询。

  4. 并切换回您想要的数据库

  5. 完成后提交。

下面是一个例子

tx := db.Begin() // start transaction

tx.Exec("use " + userDB) // switch to tenant db

tx.Exec("insert into ....") // do some work

tx.Exec("use `no-op-db`") // switch away from tenant db (there is no unuse, so I just use a dummy)

tx.Commit() // end transaction


查看完整回答
反对 回复 2022-06-21
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

您可以在对表进行查询或其他操作时显式指定db_nametable_name使用。.Table()

DBGorm.Table("db_name.table_name").Create(&con)


查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 1001 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号