3

刚刚更新到 R 3.0 并更新了所有包,包括 DBI。令我惊讶的是,我经常使用的脚本停止工作。

我无法使用 dbConnect 连接到 MySQL 数据库。代码脚本立即,因此只需几行即可重现问题

> require("RMySQL")
> m = dbDriver("MySQL")
> dbConnect(m, user = 'user', password = 'pass', dbname = 'dbname', host = 'localhost', client.flag = CLIENT_MULTI_STATEMENTS)

Error in as.integer(from) : 
cannot coerce type 'S4' to vector of type 'integer'
Calls: dbConnect ... mysqlNewConnection -> isIdCurrent -> as -> asMethod

也尝试过:

dbConnect(MySQL(),用户='用户',密码='pass',dbname ='dbname',主机='localhost',client.flag = CLIENT_MULTI_STATEMENTS)

但同样的问题

还尝试删除其他参数,但来自 dbDriver 的问题相同。

最新更新的 DBI 包发生了什么变化?我怎样才能解决这个问题?

我注意到 DBI 包是孤立的,所以不知道该问谁。

4

2 回答 2

1

我在 ubuntu 上使用 R 3.0.1 时遇到了同样的问题。

安装最新版本的 RMySQL-package 解决了这个问题:

> install.pacakges("RMySQL")

确保安装后重新启动 R。

于 2013-06-21T03:24:02.180 回答
1

我仍在深入研究这个问题,但我认为我已经确定了这个问题的多个原因。从根本上讲,它们都与 R 期望一个 S4 对象但返回一个整数有关。我相信这些通常是连接未能建立的结果。

为什么会失败?我注意到的一件事是,如果您无法关闭许多连接(~16 [查看驱动程序句柄调用中指定的最大连接数]打开),DBI 将不会/无法打开新连接。确保您dbDisconnect根据需要拨打电话。通常,此类问题会导致合理的错误消息,但有时会导致上述错误。如果可能,通过抽象层访问数据库,例如dplyr因为有些人会监视数据库连接并在它们处于非活动状态时将其杀死。然而,如果您在函数中打开连接并且函数中断,则 AFIK 无法关闭打开的连接,除非您从最初调用 dbConnect 时返回驱动程序对象。在这种情况下,您别无选择,只能重新启动您的 R 实例(可能重置您的机器并清除您的工作区)。

我最近遇到的另一个问题是,如果 RMySQL 屏蔽了 RPostgreSQL,那么 RPostgreSQL 就会失败。相反的情况似乎并非如此,但由于其他人在此处提到 RPostgreSQL 显示相同的错误消息,因此似乎值得注意。

更新

最新版本的 RMySQL (0.10.1) 似乎已经完成了 RPostgreSQL - 无论加载顺序如何,RPostgreSQL 现在都无法工作。研究 RMySQL 的人似乎也在研究 RPostgres ( https://github.com/rstats-db/RPostgres ),如果使用该包而不是 RPostgreSQL,这种冲突似乎不是问题。具体来说,RPostgres::Postgres()RPostgreSQL::PostgreSQL()dbConnect 中指定驱动程序时使用。其他软件包,例如 dplyr,目前假定为 RPostgreSQL,所以这个问题仍然可以解决(但似乎正在制定解决方案(https://github.com/rstats-db/RMySQL/issues/28)。

于 2015-01-06T12:42:07.803 回答