r - 将多个数据帧复制到 R 中的 SQLite db
问题描述
我有大约 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
. 我推荐dbWriteTable
DBI 包中的命令。下面的示例代码:
DBI::dbWriteTable(
db_connection,
DBI::Id(
catalog = db_name,
schema = schema_name,
table = table_name
),
r_table_name
)
这将取代您的copy_to
命令。您需要提供一个字符串来命名表,但数据库和模式名称可能是可选的,并且可能会被省略。
推荐阅读
- mysql - MySQL Arithmetic with FLOOR result does not increment
- ios - 在 iOS HTTP Live Stream (hls) 上捕获播放列表
- android-studio - 设置 Android Studio NDK 的问题
- python - 将多行代码转换为一行
- regex - 更改文件名日期格式
- php - 使用php将Web服务中的xml数据解析到数据库中
- java - Convert PDF to PNG - Java 10 gives a different result than Java 8
- javascript - Extjs POST 需要显示“403error”
- docker - Corda 3.3 nodes do not interact in docker network (yo-cordapp)
- regex - Excel VBA RegEx 匹配单词加上任何单词边框