【问题标题】:R Mysql dbconnect parametersR Mysql dbconnect 参数
【发布时间】:2016-12-07 14:14:37
【问题描述】:

我正在运行一个使用 RMySQL 包连接到 MySQL 数据库 的 R 程序,并且一切正常。但是现在我想通过 RSCRIPT 运行相同的程序,并且想传递连接参数,就像这样

library(RMySQL)
con_str <- "MySQL(), user = 'root', password = '', dbname = 'nepal_statagri', host = 'localhost'" (this is the string I want to pass as a parameter to RScript)
mysqlconnection = dbConnect(con_str)

但它不起作用,我收到一条消息:

“(函数(类,fdef,mtable)中的错误:无法找到一个 用于签名的函数“dbConnect”的继承方法 ‘“字符”’”。

我能做什么?

【问题讨论】:

  • RMySQL dbConnect 没有可以接受此格式的单个连接字符串的版本。您必须在 R 脚本中解析输入字符串,或者可能使用 MySQL 组。
  • 我试过这种方式,但结果是一样的。或者你可以给我举个例子?
  • 看看下面@sinQueso 给出的答案,你需要修复你的语法或使用组,RMySQL API 不允许你做你想做的事。

标签: mysql r


【解决方案1】:

如错误消息所示,您正在尝试通过向数据库传递一个字符向量来连接数据库。那是行不通的。

一种选择是在脚本中使用正确的语法:

library(RMySQL)
mysqlconnection <- dbConnect(RMySQL::MySQL(),
                            user = 'root',
                            password = '',
                            dbname = 'nepal_statgri',
                            host = 'localhost')

但是,您提到使用 Rscript。所以我的理解是,您有兴趣拥有一个不存储连接详细信息的 R 文件,而是希望将这些详细信息作为参数从 shell 终端传递。

这样做的一个选择是使用包docopt,它允许您轻松地为您的R 脚本创建命令行界面。例如,如果您将以下内容保存在名为 connect_mysql.R 的文件中:

'usage: connect_mysql.R [--user <user> --password <pwd> --db <database> --host <host>]

options:
  --user username
  --password password
  --db database
  --host host
' -> doc

library(docopt)
library(RMySQL)

opts <- docopt(doc)

con <- dbConnect(RMySQL::MySQL(),
          username = opts$user,
          password = opts$password,
          dbname  = opts$db,
          host  = opts$host)
dbListTables(con)
dbDisconnect(con)

然后您就可以使用 Rscript 调用它并传递您的连接详细信息:

Rscript connect_mysql.R --user root --password password --db nepal_statgri --host localhost

【讨论】:

  • 非常感谢,这正是我需要的!但是....我已经从 CRAN 下载了 DevTools 和 Docopt 两个软件包并安装了它们,但我无法运行它们,因为它们需要其他软件包;我一一尝试并安装了Memoise,Digest,Httr,Withr,R6 ....这似乎是一个永无止境的故事。是一个我可以获得所有依赖项的地方吗?
  • docopt 可从 CRAN 获得,并且具有最小的依赖性。如果你在 R 终端输入install.packages("docopt"),所有的依赖都会被安装。您不需要devtools 来安装它(仅当您想从 github 安装最新版本时)。
  • 完美!我不知道我为什么要遵循 github 的说明......非常感谢,它对我的​​工作真的很有用
  • 抱歉,我无法运行它。当我在命令行中使用我的所有参数发出 Rscript 命令时(正如您所写的那样),屏幕上只打印了用法,没有任何反应。哪个是我的错误?
  • 事实证明,使用-h 是不可能的,因为它与R(因此Rscript)提供的参数冲突,并且它们在传递给@987654334 之前被拦截@(见here)。我更新了答案以使用更长的参数名称以避免遇到此问题。
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 2020-11-06
  • 2017-12-09
相关资源
最近更新 更多