【问题标题】:How to read all tables from a SQLite database and store as datasets/variables in R?如何从 SQLite 数据库中读取所有表并将其存储为 R 中的数据集/变量?
【发布时间】:2021-03-02 03:19:43
【问题描述】:

我有一个包含许多表的大型 SQLite 数据库。我已经使用 RSQLite 和 DBI 包在 RStudio 中建立了到这个数据库的连接。 (我已将此数据库命名为db

library(RSQLite)
library(DBI)

目前我必须阅读所有表格并手动为其分配名称。例如:

country <- dbReadTable(db, "country")
date <- dbReadTable(db, "date")
#...and so on

您可以看到,如果您有很多表,这可能是一个非常耗时的过程。

所以我想知道是否可以创建一个新函数或使用现有函数(例如 lapply() ?)来更有效地完成此任务并从本质上加快此过程?

任何建议都非常感谢:)

【问题讨论】:

    标签: sql r database sqlite dataset


    【解决方案1】:

    两种心态:

    1. 所有表/数据到一个命名列表中:

      alldat <- lapply(setNames(nm = dbListTables(db)), dbReadTable, conn = db)
      

      这样做的好处是,如果表具有相似的含义,那么您可以使用lapply 对每个表应用相同的功能。另一个好处是来自一个数据库的所有数据都存储在一起。

      请参阅 How do I make a list of data frames? 了解如何处理框架列表。

    2. 如果您希望它们作为全局(或封闭)环境中的实际变量,则取之前的alldat,并且

      ign <- list2env(alldat, envir = .GlobalEnv)
      

      list2env 的返回值是我们传递给list2env 的环境,因此在这种情况下它并不是非常有用(尽管它在其他时候很有用)。我将它捕获到ign 中的唯一原因是减少控制台上的混乱......这是次要的。 list2env 主要是在副作用中起作用,所以这种情况下的返回值并不重要。

    【讨论】:

    • 完美!正是我想要的:)
    【解决方案2】:

    您可以使用dbListTables() 生成SQLite 数据库中所有表名的字符向量,并使用lapply() 有效地将它们导入R。我会首先检查您是否能够将数据库中的所有表导入内存。

    下面是一个可重现的例子:

    library(RSQLite)
    library(DBI)
    
    db <- dbConnect(RSQLite::SQLite(), ":memory:")
    dbWriteTable(db, "mtcars", mtcars)
    dbWriteTable(db, "iris", iris)
    db_tbls <- dbListTables(db)
    
    tbl_list <- lapply(db_tbls, dbReadTable, conn = db)
    tbl_list <- setNames(tbl_list, db_tbls)
    
    dbDisconnect(db)
    
    > lapply(tbl_list, head)
    $iris
      Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    1          5.1         3.5          1.4         0.2  setosa
    2          4.9         3.0          1.4         0.2  setosa
    3          4.7         3.2          1.3         0.2  setosa
    4          4.6         3.1          1.5         0.2  setosa
    5          5.0         3.6          1.4         0.2  setosa
    6          5.4         3.9          1.7         0.4  setosa
    
    $mtcars
       mpg cyl disp  hp drat    wt  qsec vs am gear carb
    1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
    2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
    3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
    4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
    5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
    6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多