将多个数据帧复制到 R 中的 SQLite 数据库

Copy Multiple data frames to SQLite db in R

我有大约 250 个 csv 文件要加载到 SQLite 数据库中。我已将所有 csv 作为数据框加载到我的全局环境中。我正在使用以下函数将它们全部复制到 db 但得到 Error: df must be local dataframe or a remote tbl_sql

library(DBI)
library(odbc)
library(rstudioapi)
library(tidyverse)
library(dbplyr)
library(RSQLite)
library(dm)


# Create DB Instance ---------------------------------------------

my_db <- dbConnect(RSQLite::SQLite(), "test_db.sqlite", create = TRUE)

# Load all csv files ---------------------------------------------

filenames <- list.files(pattern = ".*csv")
names <- substr(filenames, 1, nchar(filenames)-4)

for (i in names) {
  filepath <- file.path(paste(i, ".csv", sep = ""))
  assign(i, read.csv(filepath, sep = ",")) 
}

# Get list of data.frames ----------------------------------------

tables <- as.data.frame(sapply(mget(ls(), .GlobalEnv), is.data.frame))

colnames(tables) <- "is_data_frame"

tables <- tables %>% 
  filter(is_data_frame == "TRUE")

table_list <- row.names(tables)

# Copy dataframes to db ------------------------------------------
for (j in table_list) {
  copy_to(my_db, j)
}

我使用 copy_to 取得了不同程度的成功。我推荐 DBI 包中的 dbWriteTable 命令。示例代码如下:

DBI::dbWriteTable(
    db_connection,
    DBI::Id(
        catalog = db_name,
        schema = schema_name,
        table = table_name
    ),
    r_table_name
)

这将取代您的 copy_to 命令。您将需要提供一个字符串来命名 table,但数据库和架构名称可能是可选的,并且可能会被省略。