在R中使用RMySQL时,dbSendQuery仅返回500行

时间:2015-08-12 23:51:10

标签: r rmysql

我正在使用RMySQL来查询数据库。

我用过

df <- fetch(dbSendQuery(con, "SELECT some_col from some_table"))

并收到了这条消息:

Error in fetch(dbSendQuery(con, "SELECT some_col from some_table")) : 
  error in evaluating the argument 'res' in selecting a method for function 'fetch': Error in .local(conn, statement, ...) : 
  connection with pending rows, close resultSet before continuing

奇怪的是,df实际上已经创建了; 500 obs. of 1 variables,它确实让我回到了我对这500个人的期望。

  • some_table有292,000行,这应该不是问题 完全为R。

  • 我尝试过我的架构中的各种其他表格(例如, some_other_table)得到了同样的结果。所以它似乎是 关于fetch函数本身的事情。

  • 我尝试使用dbGetQuerydbFetch但没有成功。

此错误意味着什么,以及如何获取表格中的所有行?

关注

我发现我可以使用

来整理整张桌子

dbReadTable(con, 'some_table')

2 个答案:

答案 0 :(得分:8)

您所看到的是正常行为。 RMySQL实现仅检索n个记录,如果缺少n,则只返回fetch.default.rec,如MySQL调用中所指定的那样(默认为500)。

要返回所有行,请使用n = -1

此外,为整个查询字符串指定一个名称,然后将该名称传递给fetch()语句非常有用。

drv <- dbDriver("MySQL")
con <- dbConnect(drv, user = "username", password="password1", 
                 host = "localhost", dbname="database")
res <- dbSendQuery(con, statement = paste(
                      "SELECT some_column1, some_column2",
                      "FROM some_table", 
                      "WHERE some_column2 >= x",
                      "ORDER BY some_column1"))
data1 <- fetch(res, n = -1)   

答案 1 :(得分:0)

此链接有助于以有用的方式使用RMySQL包: Accessing MySQL through R

它还包括您必须将参数n=-1传递给fetch函数以检索所有数据,而不仅仅是{{1}中默认设置的第一个500 rows功能。

我希望这对你有所帮助。

其他有用的链接:

R interface to the MySQL database

Accessing MySQL through R