首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Go中将sqlx.DB转换为sql.DB

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

Stack Overflow用户
提问于 2020-06-17 11:30:39
回答 2查看 1.1K关注 0票数 1

将类型sqlx.DB (jmoiron/sqlx)转换为sql.DB (数据库/sql)的最佳方法是什么?

我目前使用的是github.com/golang-migrate/migrate包,它需要一个现有的连接来遵循sql.DB接口。

代码语言:javascript
复制
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()
}

更新:我混合了描述并添加了更多细节。标题是正确的。

EN

回答 2

Stack Overflow用户

发布于 2020-06-17 11:55:00

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

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

下面是一个使用"mysql“作为驱动程序的示例:

代码语言:javascript
复制
var myDb *sql.DB

...

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

编辑:要将答案添加到评论中提出的新问题,也可以反向操作并从*sqlx.DB获取*sql.DB

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

代码语言:javascript
复制
var mySqlxDb *sqlx.DB

...

var anSqlDb := mySqlxDb.DB
票数 5
EN

Stack Overflow用户

发布于 2020-06-18 00:09:32

doc

sqlx.DB是一个围绕sql.DB的包装器,它在打开时跟踪driverName,主要用于使用正确的绑定自动绑定命名查询。

所以你可以这样做

代码语言:javascript
复制
db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
sqlDB := db.DB // sqlDB is *sql.DB
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62421037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档