RMySQL - 自动从数据库表中读取数据

RMySQL - automating reading data from DB tables

我有这样一段代码:

mydb <- dbConnect(MySQL(), user = "****", password = "****", dbname = "c_global", host = "")

df_ipt_rate_history   <- fetch(dbSendQuery(mydb, "select * from ipt_rate_history"), n=-1)
df_map_occupation     <- fetch(dbSendQuery(mydb, "select * from map_occupation"), n=-1)
df_map_titles         <- fetch(dbSendQuery(mydb, "select * from map_titles"), n=-1)
df_pcode_full_areas   <- fetch(dbSendQuery(mydb, "select * from pcode_full_areas"), n=-1)
df_pcode_rics_regions <- fetch(dbSendQuery(mydb, "select * from pcode_rics_regions"), n=-1)
df_pcode_sector_areas <- fetch(dbSendQuery(mydb, "select * from pcode_sector_areas"), n=-1)

...等等(多个tables)

dbDisconnect(mydb)

它工作正常,但有没有办法设置某种循环,在单个命令中读取数据库中的每个 table(并输出到数据帧)?

谢谢

假设每个 table 都在不同的结构中,一种选择是使用 lapplypurrr::map 来获取每个数据帧并将它们存储在列表中。

在基数 R 中:

mydb <- dbConnect(MySQL(), user = "****", password = "****", dbname = "c_global", host = "")

table_names <- c("ipt_rate_history",
                 "map_titles",
                 "pcode_full_areas",
                 "pcode_rics_regions",
                 "pcode_sector_areas")

df <- lapply(table_names, 
             function(x) fetch(dbSendQuery(mydb, paste("select * from", x), n = -1)))

df <- setNames(df, table_names)

purrr包:

table_names <- c("ipt_rate_history",
                 "map_titles",
                 "pcode_full_areas",
                 "pcode_rics_regions",
                 "pcode_sector_areas")

df <- purrr::map(table_names, 
                 ~fetch(dbSendQuery(mydb, paste("select * from", .), n = -1)))

df <- purrr::set_names(df, table_names)

然后您可以使用 df$table_name 访问每个 table,例如 df$ipt_rate_history.

您可以使用 dbListTables 列出数据库中的所有表,然后使用实用函数 dbReadTable.

读取它们的所有行和列
all_data <- lapply(dbListTables(mydb), dbReadTable, conn = mydb)

顺便说一句,除非有必要,如果需要时可以从数据库中读取数据,则将所有数据加载到内存中可能不是一个好主意。