По сути, sqldf
и dbExecute
- это два разных процесса, в которых первый работает в локальной среде, а второй - во внешней базе данных (хотя и с отмеченными исключениями).
За документы ,
sqldf - это пакет R для запуска операторов SQL на R фреймах данных, оптимизированный для удобства.
Следовательно, sqldf
, выполняется на R фреймах данных в локальной среде. По умолчанию sqldf
не используется для внесения изменений в постоянную внешнюю базу данных. Технически, он запускает базу данных SQLite в памяти, которая не сохраняется после сеанса R. Следовательно, если all_banks не является фреймом данных в глобальной среде, он не будет распознан sqldf
. С учетом вышесказанного, существует расширенный способ использования sqldf
с постоянной базой данных SQLite. Но решение ниже, возможно, проще.
Per документы , DBI::dbExecute
Выполняет оператор и возвращает количество затронутых строк.
С первым аргументом:
conn
: объект DBIConnection, возвращаемый dbConnect()
.
Следовательно, dbExecute
выполняетсякоманды для внешней базы данных и в пределах ее области действия не используют локальные объекты среды. Следовательно, если df1 не является таблицей в базе данных, она не будет распознана dbExecute
.
Solution
ToДля разрешения потребностей в добавлении базы данных просто используйте DBI dbWriteTable
, который помещает локальный фрейм данных R во внешнюю таблицу базы данных (при условии одинаковой структуры в обеих конечных точках, если не используется overwrite=TRUE
). Такие изменения в таблице останутся постоянными даже после закрытия соединения с базой данных или сеанса R.
dbWriteTable(con, name="all_banks", value=df1, append=TRUE)