刚刚更新到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(),user ='user',password ='pass',dbname ='dbname',host ='localhost',client.flag = CLIENT_MULTI_STATEMENTS)
但同样的问题
还尝试删除其他参数,但同样的问题来自dbDriver。
最新更新的DBI包中有哪些变化?我该如何解决这个问题?
我注意到DBI包是孤立的,所以不知道该问谁。
答案 0 :(得分:1)
我在ubuntu上遇到了与R 3.0.1相同的问题。
安装最新版本的RMySQL-package解决了这个问题:
> install.pacakges("RMySQL")
确保在安装后重新启动R.
答案 1 :(得分:1)
我还在深入研究这个问题,但我想我已经确定了这个问题的多种原因。在它们的根源上,它们都与R期望一个S4对象有关,而是取回一个整数。我相信这些通常是连接无法建立的结果。
为什么失败?我注意到的一件事是,如果你未能接近许多连接(~16 [见驱动程序句柄调用中指定的最大连接数]打开)DBI将不会/无法打开新连接。确保您根据需要致电dbDisconnect
。通常,这种问题会产生合理的错误消息,但有时会导致上述错误。如果可能的话,通过抽象层访问DB,例如, dplyr
因为有些人将监视数据库连接并在它们处于非活动状态时终止它们。而AFIK如果在函数中打开连接并且函数中断,则除非从初始调用dbConnect返回驱动程序对象,否则无法关闭打开的连接。在这种情况下,您别无选择,只能重新启动R的实例(可能还要重置机器并清理工作区)。
我最近遇到的另一个问题是,如果RMySQL屏蔽RPostgreSQL,那么RPostgreSQL将失败。反过来似乎并非如此,但是因为其他人在这里提到RPostgreSQL显示相同的错误信息,所以它似乎值得注意。
<强>更新强>
最新版本的RMySQL(0.10.1)似乎已经完成了RPostgreSQL - 无论加载顺序如何,RPostgreSQL现在都无法工作。在RMySQL上工作的人似乎正在研究RPostgres(https://github.com/rstats-db/RPostgres),如果使用该软件包而不是RPostgreSQL,这种冲突似乎没有问题。具体而言,在dbConnect中指定驱动程序时,在RPostgres::Postgres()
的位置使用RPostgreSQL::PostgreSQL()
。其他包装,例如dplyr,目前假设RPostgreSQL,所以这个问题仍然可以咬人(但似乎解决方案正在进行中(https://github.com/rstats-db/RMySQL/issues/28)。