使用管道将 table 写入多个数据库连接
Write table to multiple database connections using pipes
我创建了两个 sqlite 数据库,我想使用 magrittr/dplyr 管道约定将单个数据帧写入每个数据库。
conn1 <- DBI::dbConnect(drv = RSQLite::SQLite(), dbname = "db1")
conn2 <- DBI::dbConnect(drv = RSQLite::SQLite(), dbname = "db2")
iris %>%
DBI::dbWriteTable(conn1, "iris", .) %>% # works
DBI::dbWriteTable(conn2, "iris", .) # does not work because lhs is not a table
又一次(失败)尝试,因为dbWriteTable
只接受一个连接
iris %>%
DBI::dbWriteTable(c(conn1, conn2), "iris", .)
我更喜欢使用管道变体的解决方案,也许是保留 iris
输出的变体
对于 MrFlicks 的评论,您可以只使用 purrr
或 apply
函数族来迭代使用 walk
的连接列表,它使用函数迭代列表通常要求他们的副作用。
library(DBI)
library(purrr)
conn1 <- dbConnect(drv = RSQLite::SQLite(), dbname = "db1")
conn2 <- dbConnect(drv = RSQLite::SQLite(), dbname = "db2")
connections <- list(conn1, conn2)
walk(connections, ~dbWriteTable(.x, "iris", iris))
普通管道运算符%>%
将前一个函数的结果传递给下一个函数。 DBI::dbWriteTable
函数 returns TRUE
如果有效。它不会重新传递传递给它的 data.frame
如果导入 magrittr
,则可以改用 "tee" 运算符 %T>%
。这基本上丢弃了之前的函数 returns 并再次传递原始输入。例如
iris %T>%
DBI::dbWriteTable(conn1, "iris", .) %T>%
DBI::dbWriteTable(conn2, "iris", .)
请参阅 magrittr documentation 了解更多关于 tee 运算符的信息。
我创建了两个 sqlite 数据库,我想使用 magrittr/dplyr 管道约定将单个数据帧写入每个数据库。
conn1 <- DBI::dbConnect(drv = RSQLite::SQLite(), dbname = "db1")
conn2 <- DBI::dbConnect(drv = RSQLite::SQLite(), dbname = "db2")
iris %>%
DBI::dbWriteTable(conn1, "iris", .) %>% # works
DBI::dbWriteTable(conn2, "iris", .) # does not work because lhs is not a table
又一次(失败)尝试,因为dbWriteTable
只接受一个连接
iris %>%
DBI::dbWriteTable(c(conn1, conn2), "iris", .)
我更喜欢使用管道变体的解决方案,也许是保留 iris
对于 MrFlicks 的评论,您可以只使用 purrr
或 apply
函数族来迭代使用 walk
的连接列表,它使用函数迭代列表通常要求他们的副作用。
library(DBI)
library(purrr)
conn1 <- dbConnect(drv = RSQLite::SQLite(), dbname = "db1")
conn2 <- dbConnect(drv = RSQLite::SQLite(), dbname = "db2")
connections <- list(conn1, conn2)
walk(connections, ~dbWriteTable(.x, "iris", iris))
普通管道运算符%>%
将前一个函数的结果传递给下一个函数。 DBI::dbWriteTable
函数 returns TRUE
如果有效。它不会重新传递传递给它的 data.frame
如果导入 magrittr
,则可以改用 "tee" 运算符 %T>%
。这基本上丢弃了之前的函数 returns 并再次传递原始输入。例如
iris %T>%
DBI::dbWriteTable(conn1, "iris", .) %T>%
DBI::dbWriteTable(conn2, "iris", .)
请参阅 magrittr documentation 了解更多关于 tee 运算符的信息。