Мне очень нравится функция dbWriteTable из DBI (обычно я использую RSQLite или ROracle в качестве backend).DBI dbWriteTable
Я использую эту функцию для импорта большого количества таблиц Excel, проблема в том, что если эти электронные таблицы были созданы в течение длительного времени, то изменения столбца будут добавлены/удалены или изменены имя из одного документа в другой.
Итак, у меня вопрос, есть ли у кого-то относительно быстрый способ добавить данные в базу данных, не имея при этом полного соответствия поданному списку?
Вот пример скрипта, который я использую
require(RSQLite)
require(readxl)
# Create database file
conn <- dbConnect(drv=SQLite(),dbname = "path to database")
# Define import function
excel2sqltable <- function(conn, file, table) {
source.df <- read_excel(path=file,col_names = TRUE) %>%
cbind("SourceFile" = file, .)
names(source.df) <- source.df %>%
data.frame(check.names = TRUE) %>%
{gsub("[.]",x=names(.),replacement="_")}
print(paste("Importing ", file))
setOldClass(c("tbl_df", "data.frame"))
dbWriteTable(conn = conn, name = table, value = source.df, append=TRUE)
}
С этой функцией я могу сделать: sapply(list.files(),FUN = function(x){excel2sqltable(conn,x,"Imports")})
Непонятно, что вы пытаетесь сделать здесь. Вы пытаетесь пропустить часть об именах столбцов 'source.df'? Или вы говорите о части 'dbWriteTable' скрипта? – Abdou
Я предполагаю, что обновить этот скрипт, чтобы динамически создавать поля, такие, что 'dbWriteTable' не вызывает ошибку' Columns NewColumn not found'. – sgp667
Запросить db для одной строки и задать имена столбцов в соответствии с этим? Мне нужно будет посмотреть в документах, чтобы увидеть, есть ли функция DBI для просто возвращающих имен столбцов таблицы ... – joran