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

dbSendQuery only returning 500 rows when using RMySQL in R

我正在使用 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 个的预期。

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

跟进

我发现我可以通过使用

吞下整个 table

dbReadTable(con, 'some_table')

您看到的是正常行为。 RMySQL 实现仅检索 n 条记录,如果 n 丢失,则仅 return 到 fetch.default.rec 的 [=23= 调用中指定] ](默认为 500)。

到 return 所有行都使用 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)   

这个 link 对以有用的方式使用 RMySQL 包有很大帮助: Accessing MySQL through R

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

希望对你有所帮助,就像它对我一样。

其他有用的links:

R interface to the MySQL database

Accessing MySQL through R