【问题标题】:R Export SQLiteResult Recordset to Excel or csvR 将 SQLiteResult 记录集导出到 Excel 或 csv
【发布时间】:2019-11-05 15:55:25
【问题描述】:

我正在使用 RSQLite 包成功将数据写入本地 SQLite 数据库。

我希望能够将选择查询的结果导出到 Excel。问题是结果记录集的类是:

>class(rs)
[1] "SQLiteResult"
attr(,"package")
[1] "RSQLite"

我无法将其导出到 Excel。使用标准方法的错误信息是:

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
cannot coerce class ‘structure("SQLiteResult", package = "RSQLite")’ to a 
data.frame

我尝试了各种谷歌搜索,并阅读了 RSQLite 和 SQLite 文档。

导致“强制”错误的示例代码:

library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbWriteTable(con, "mtcars", mtcars)
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
dbFetch(res)
write.csv(res, file = "C:/test.csv")
dbClearResult(res)
dbDisconnect(con)

Sqlite 文档只提供了一种使用命令行或 SQLiteStudio 导出的方法。我想在我的 R 代码中实现这一点。

RSQLite 包文档建议使用,例如:

dbReadTable(con, "mtcars", row.names = FALSE)

当我用它替换 dbSendQuery 行时,这会导致错误:

Warning message: Expired, result set already closed 

请谁能指出我遗漏了什么?

谢谢!

【问题讨论】:

    标签: r excel export recordset rsqlite


    【解决方案1】:

    您可以使用函数DBI::dbGetQuery 将结果作为 R data.frame 返回,然后您可以将其写入为 csv 文件。这负责发送查询、检索结果并为您清除结果集。见DBI Manual

    library(RSQLite) # Also attaches DBI namespace
    con<- dbConnect(RSQLite::SQLite(), ":memory:")
    dbWriteTable(con, "mtcars", mtcars)
    res<- dbGetQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
    write.csv(res, "test.csv")
    dbDisconnect(con)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2011-08-07
      • 2011-03-20
      相关资源
      最近更新 更多