在R中使用sqldf - 无法指定正确的用户名

时间:2013-12-31 09:31:57

标签: mysql r sqldf

我刚刚下载了名为R的{​​{1}}软件包,只是为了好玩,但到目前为止还没能正确运行它。当我尝试使用sqldf数据集进行一些查询时:

iris

发生了错误sqldf("select * from iris limit 5")

所以我打开了它的帮助文档,然后运行以下查询:

Error in mysqlNewConnection(drv, ...) : 
  RS-DBI driver: (Failed to connect to database: Error: Access denied for user 'myUserName'@'localhost' (using password: NO)
)
Error in !dbPreExists : invalid argument type

错误消息与上述相同,这意味着我未能正确指定sqldf("select * from iris limit 5", user="myUser") 参数,因为错误消息未更改为user

那么如何修复它并正确运行呢?

当我使用Access denied for user 'myUser'@'localhost')时,我会使用以下参数来建立连接。

RMySQL

我使用的是OS X 10.9.1并使用通过自制程序安装的MySQL 5.6,以及R版本3.0.2和sqldf版本0.4-6。

感谢。

3 个答案:

答案 0 :(得分:3)

我首先要确保sqldf与SQLLite一起使用。

head(sqldf("select * from iris",drv='SQLite'))

接下来,我强​​烈建议您始终使用drv = param或显式设置sqldf.driver变量。依赖库(..)调用的顺序可能会导致错误。

如果您正在做一些简单的事情,您可以使用SQLLite,因为它很快并且几乎没有依赖关系(例如,如果您移动代码,则不必安装MySQL)。如果您正在使用日期,则SQLLite并不是很好,因此您可能希望使用MySQL。 正如评论和?sqldf底部的注释中所提到的,您需要使用[Client]部分为mysql设置my.cnf,以便包括sqldf在内的所有客户端都使用特定的登录名。还要确保dbname的设置如下:

options(sqldf.driver = "RMySQL")
options(RMySQL.dbname = "rtest")
head(sqldf("select * from iris"))

我没有找到一种在没有my.cnf的情况下使用MySQL的可靠方法。使用sqldf的显式连接对我来说也不起作用。我认为PostreSQL更好,因为你可以根据文档在R里面设置用户名等。

答案 1 :(得分:2)

我遇到了第一个错误,因为在我的情况下,sqldf默认使用mysql。然后,我把它切换到SQLite,它使用以下命令。

options(sqldf.driver = "SQLite")

答案 2 :(得分:2)

如果您已加载RMySQL包尝试分离RMySQL和sqldf包并加载sqldf package.its对我有效。请看下面的代码

detach(package:RMySQL)
detach(package:sqldf)
library(sqldf)

sqldf("select * from iris limit 5",user="sa", password = "root", host = "192.168.200.182", port=3377)