登录
首页 >  Golang >  Go问答

将 sqlx.DB 转换为 sql.DB 在 Go 中进行操作

来源:stackoverflow

时间:2024-03-17 21:30:29 253浏览 收藏

将 SQLx.DB 转换为 SQL.DB 是一个常见需求,特别是当需要使用依赖 SQL.DB 接口的库时。本文提供了一个简单的方法,使用 SQLx 的 NewDB 方法将 SQL.DB 转换为 SQLx.DB,从而满足这一需求。通过提供一个代码示例,本文展示了如何使用“mysql”驱动程序进行转换。此外,本文还回答了一个附加问题,即如何从 SQLx.DB 中获取 SQL.DB,这同样可以通过访问嵌入式 SQL.DB 结构来实现。

问题内容

将类型 sqlx.db (jmoiron/sqlx) 转换为 sql.db (数据库/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()
}

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


解决方案


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

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

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

var mydb *sql.db

...

ansqlxdb := sqlx.newdb(mydb, "mysql") // returns *sqlx.db

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

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

var mySqlxDb *sqlx.DB

...

var anSqlDb := mySqlxDb.DB

到这里,我们也就讲完了《将 sqlx.DB 转换为 sql.DB 在 Go 中进行操作》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>