如何从SQLite数据库中导入数据?

25

我有一个扩展名为.sqlite的SQLite数据库文件,是从Scraperwiki导出的。我应该如何将它导入R中,并将原始数据库表映射为单独的数据框?

3个回答

47
你可以使用 RSQLite 包。
一些示例代码将整个数据存储在 data.frame 中:
library("RSQLite")

## connect to db
con <- dbConnect(drv=RSQLite::SQLite(), dbname="YOURSQLITEFILE")

## list all tables
tables <- dbListTables(con)

## exclude sqlite_sequence (contains table information)
tables <- tables[tables != "sqlite_sequence"]

lDataFrames <- vector("list", length=length(tables))

## create a data.frame for each table
for (i in seq(along=tables)) {
  lDataFrames[[i]] <- dbGetQuery(conn=con, statement=paste("SELECT * FROM '", tables[[i]], "'", sep=""))
}

你可能想将 con <- dbConnect(drv="SQLite", dbname="YOURSQLITEFILE") 更改为 con <- dbConnect(drv=SQLite(), dbname="YOURSQLITEFILE") - four-eyes
此外,你编写的 for 循环并没有将数据存储为 data.frames,而是存储为一个大列表。在 for i in seq 行下面加上这句话就可以了:lDataFrames[[i]]<- data.frame(dbGetQuery(con, "SELECT * FROM '", tables[[i])) - four-eyes
@Chrissl:嗯,对我来说看起来很好:class(dbGetQuery(conn=con, statement=paste("SELECT * FROM '", tables[[1]], "'", sep=""))) 显示 data.frame - sgibb
对我来说没有用,但是我也没有在循环中。只是建议一下 :) - four-eyes
在完成连接操作后,请记得调用 dbDisconnect() - robertspierre
显示剩余3条评论

6

对于其他遇到这篇文章的人,使用purr库完成从顶部答案开始循环的一个好方法是:

lDataFrames <- map(tables, ~{
  dbGetQuery(conn=con, statement=paste("SELECT * FROM '", .x, "'", sep=""))
})

也就是说,这意味着您不必执行以下操作:
lDataFrames <- vector("list", length=length(tables))

1

将sgibb和primaj的答案相结合,给表格命名,并添加检索所有表格或特定表格的功能:

getDatabaseTables <- function(dbname="YOURSQLITEFILE", tableName=NULL){
  library("RSQLite")
  con <- dbConnect(drv=RSQLite::SQLite(), dbname=dbname) # connect to db
  tables <- dbListTables(con) # list all table names

  if (is.null(tableName)){
    # get all tables
    lDataFrames <- map(tables, ~{ dbGetQuery(conn=con, statement=paste("SELECT * FROM '", .x, "'", sep="")) })
    # name tables
    names(lDataFrames) <- tables
    return (lDataFrames)
  }
  else{
    # get specific table
    return(dbGetQuery(conn=con, statement=paste("SELECT * FROM '", tableName, "'", sep="")))
  }
}

# get all tables
lDataFrames <- getDatabaseTables(dbname="YOURSQLITEFILE")

# get specific table
df <- getDatabaseTables(dbname="YOURSQLITEFILE", tableName="YOURTABLE")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接