我是 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
你需要做的就是
开始交易,
设置你的数据库
运行您想要的查询。
并切换回您想要的数据库
完成后提交。
下面是一个例子
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

蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
您可以在对表进行查询或其他操作时显式指定db_name
和table_name
使用。.Table()
DBGorm.Table("db_name.table_name").Create(&con)
- 2 回答
- 0 关注
- 1001 浏览
添加回答
举报
0/150
提交
取消