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

Connect to MySQL database via dplyr using stored credentials

我想使用 dplyr 访问 MySQL 数据库,而不必将我的数据库密码存储在平面文本 R 代码中。因此,我更愿意引用我的 .my.cnf 文件,但由于 src_mysql 具有主机、用户和密码的默认参数,我能找到的唯一方法是通过而不是在-优雅:

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

是否有更简洁的方法通过存储的凭据从 dplyr 连接到 MySQL 数据库?

从 Hadley 对此 pull request (Feb 2014, asking to adapt code to allow reading my.cnf) and the documentation by 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,
        ...)
}

那你就可以

test_db <- src_mysql_from_cnf("test")