将类型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()
}更新:我混合了描述并添加了更多细节。标题是正确的。
发布于 2020-06-17 11:55:00
您可以使用sqlx的NewDb方法将sql.DB (这是一个结构,而不是一个接口)转换为sqlx.DB:Code
此方法需要您的*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发布于 2020-06-18 00:09:32
在doc中
sqlx.DB是一个围绕sql.DB的包装器,它在打开时跟踪driverName,主要用于使用正确的绑定自动绑定命名查询。
所以你可以这样做
db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
sqlDB := db.DB // sqlDB is *sql.DBhttps://stackoverflow.com/questions/62421037
复制相似问题