将多个数据帧复制到 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,但数据库和架构名称可能是可选的,并且可能会被省略。
我有大约 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,但数据库和架构名称可能是可选的,并且可能会被省略。