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

Mat*_*ien 4 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
Run Code Online (Sandbox Code Playgroud)

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

  • 该表some_table有292,000行,对于R来说应该不是问题.

  • 我在我的模式中尝试了各种其他表(例如 some_other_table),并得到了相同的结果.所以它似乎与fetch功能本身有关.

  • 我尝试使用dbGetQuery,并dbFetch没有成功.

这个错误是什么意思,我怎样才能获得表中的所有行?

跟进

我发现我可以通过使用来啜饮整张桌子

dbReadTable(con, 'some_table')

scr*_*les 9

你所看到的是正常行为.这些RMySQL实现仅检索n记录,如果n缺少,则只返回fetch.default.recMySQL调用中指定的值(默认为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)   
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,如果您查看帮助部分或在 R 控制台中打印源代码,它甚至似乎“n = -1”是默认设置。 (2认同)