使用存储的凭据通过dplyr连接到MySQL数据库

Jth*_*rpe 4 r rmysql dplyr

我想使用MySQL数据库,dplyr而无需将我的数据库密码存储在平面文本R代码中.因此,我更喜欢引用我的.my.cnf文件,但由于src_mysql具有主机,用户和密码的默认参数,我可以找到的唯一方法是通过相当优雅:

test_db <- src_mysql("test",
                     default.file=path.expand("~/.my.cnf"),
                     host=NULL,
                     user=NULL,
                     password=NULL)
Run Code Online (Sandbox Code Playgroud)

是否有一种不那么冗长的方式从dplyr存储凭证连接到MySQL数据库?

Nel*_*son 5

从Hadley对此拉取请求的响应(2014年2月,要求调整代码以允许读取 my.cnf)和Hadley(他建议使用my.cnf并且应该传递NULL值)的文档看来,传递NULL是期望的意图.

如果这很麻烦,请考虑.Rprofile使用以下内容在您的函数中创建一个函数:

src_mysql_from_cnf <- function(dbname,
                      dir="~/.my.cnf",
                      host=NULL,
                      user=NULL,
                      password=NULL,
                      ...) {
    if(!(file.exists(dir)))
        stop(sprintf("No such file '%s'",dir))
    dplyr::src_mysql(
        dbname,
        default.file=path.expand(dir),
        # explicitly passing null unless otherwise specified.
        host=host,
        user=user,
        password=password,
        ...)
}
Run Code Online (Sandbox Code Playgroud)

那么你可以

test_db <- src_mysql_from_cnf("test")
Run Code Online (Sandbox Code Playgroud)