1

我只是为了好玩才下载了R一个名为的包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,我使用以下参数来建立连接。

con <- dbConnect(dbDriver("MySQL"),username="myUser",password="myPass",host="myHost",unix.sock="/tmp/mysql.sock",dbname="myDB")

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

谢谢。

4

3 回答 3

3

我首先要确保 sqldf 与 SQLLite 一起工作。

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

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

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

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

我还没有找到一个可靠的方法来使用没有 my.cnf 的 MySQL。为 sqldf 使用显式连接对我也不起作用。我认为 PostreSQL 更好,因为您可以根据文档从 R 内部设置用户名等。

于 2014-02-06T21:13:00.353 回答
2

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

options(sqldf.driver = "SQLite")
于 2016-03-17T09:02:03.657 回答
2

如果您已加载 RMySQL 包,请尝试分离 RMySQL 和 sqldf 包并加载 sqldf 包。它对我有用。请看我下面的代码

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)
于 2016-08-03T07:14:18.870 回答