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

在 Go 中将 sqlx.DB 转换为 sql.DB

在 Go 中将 sqlx.DB 转换为 sql.DB

Go
梦里花落0921 2022-06-13 10:50:35
将类型sqlx.DB(jmoiron/sqlx) 转换为sql.DB(database/sql) 的最佳方法是什么?我目前正在使用该包github.com/golang-migrate/migrate,它需要一个现有的连接来遵循sql.DB接口。func Migrate(db *sqlx.DB) error {    driver, err := postgres.WithInstance(db, &postgres.Config{})    m, err := migrate.NewWithDatabaseInstance(        "file://src/db/migrations",        "postgres", driver)    if err != nil {        return err    }    return m.Up()}更新:我混合了描述并添加了更多细节。标题是正确的。
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您可以使用 sqlx 的方法将sql.DB(这是一个结构,而不是接口)转换为:代码sqlx.DBNewDb


此方法需要您*sql.DB以及驱动程序名称作为字符串。


这是一个使用“mysql”作为驱动程序的示例:


var myDb *sql.DB


...


anSqlxDb := sqlx.NewDb(myDb, "mysql") // returns *sqlx.DB

编辑:要添加评论中提出的新问题的答案,也可以反过来并*sql.DB从*sqlx.DB.


该*sqlx.DB结构包含一个嵌入的*sql.DB(代码)。作为嵌入式结构,可以使用其类型名称 ( DB) 检索它:


var mySqlxDb *sqlx.DB


...


var anSqlDb := mySqlxDb.DB


查看完整回答
反对 回复 2022-06-13
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

在文档中


sqlx.DB 是 sql.DB 的包装器,它在打开时跟踪驱动程序名称,主要用于使用正确的绑定变量自动绑定命名查询。


所以你可以这样做


db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")

sqlDB := db.DB // sqlDB is *sql.DB


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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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