首页 > 解决方案 > 获取数据库连接的连接字符串

问题描述

我正在尝试测试此功能:

//OpenConnection opens a connection to a MySQL database by `connStr`
// or returns error. If `connStr` is empty, error is returned.
//
// Parameters:
// - `connStr`: the URL of the database to connect to
// - `interpolateParams` : should we interpolate parameters?
//
// Returns:
// - pointer to the database connection
// - any errors that happened during this process
func OpenConnection(connStr string, interpolateParams bool) (*sql.DB, *errors.ErrorSt) {
    if connStr == "" {
        return nil, errors.Database().ReplaceMessage("No database connection string.")
    }
    connStr = connStr + "?parseTime=true&multiStatements=true"
    if interpolateParams {
        connStr += "&interpolateParams=true"
    }

    db, err := sql.Open("mysql", connStr)
    if err != nil {
        return nil, errors.Database().AddDetails(err.Error(), connStr)
    }
    return db, nil
}

对于 的情况interpolateParams。我正在筛选官方文档,发现没有简单的方法可以从sql.DB. 由于这是单元测试,我当然会使用虚假的连接 URL 来访问该功能。

有没有办法从中获取连接 URLsql.DB以检查插值查询字符串?

标签: unit-testinggo

解决方案


database/sql主要专注于成为使用 SQL 做事的接口。连接字符串通常是特定于驱动程序的,因此我会查看您正在使用的驱动程序以获取如何获取连接字符串的线索在您的情况下,根据顶部的注释判断,您使用的是 MySQL,所以我假设您会使用go-sql-driver/mysql. 您可以直接在代码中导入它(而不是使用空白导入)并访问Config结构,记录在这里:https ://github.com/go-sql-driver/mysql/blob/master/dsn.go#L35其中从你传入的 dsn 中填充sql.Open


推荐阅读