Можно ли вставить (добавить) строку в таблицу SQLite db с помощью пакета dplyr?
Я новичок в возможностях подключения к базе данных пакета dplyr, но мне очень интересно использовать его для соединения SQLite. Я последовал за этот учебник и создал базу данных SQLite (my_db)
my_db <- src_sqlite("my_db.sqlite3", create = T)
и вставил dataframe (df) в виде таблицы (my_table) этой базы данных.
copy_to(my_db,df,"my_table")
Теперь я хочу вставить новые строки в эту таблицу. Я пробовал что-то вроде этого (да, я должен признать, что это даже не похоже на обещание... но я все же пробовал):
collect(build_sql("INSERT INTO my_table VALUES (",newdf,")", con=my_db))
Кто-нибудь знает, возможно ли добавление строк в существующую таблицу db sqlite, используя dplyr? Или как вы справитесь с этой проблемой? Большое спасибо заранее!
Ответы
Ответ 1
Вы можете выполнять операции SQL в базе данных/таблице, созданной с помощью dplyr
, но вам нужно вернуться к вызовам RSQLite/DBI и изменить способ создания базы данных/таблицы:
library(dplyr)
my_db <- src_sqlite("my_db.sqlite3", create=TRUE)
copy_to(my_db, iris, "my_table", temporary=FALSE) # need to set temporary to FALSE
# grab the db connection from the object created by src_sqlite
# and issue the INSERT That way
res <- dbSendQuery(my_db$con,
'INSERT INTO my_table VALUES (9.9, 9.9, 9.9, 9.9, "new")')
Ответ 2
Нет, вы можете сделать все это в пределах dplyr
.
require(dplyr)
my_db <- src_sqlite( "my_db.sqlite3", create = TRUE) # create src
copy_to( my_db, iris, "my_table", temporary = FALSE) # create table
newdf = iris # create new data
db_insert_into( con = my_db$con, table = "my_table", values = newdf) # insert into
Ответ 3
В в этой группе новостей. Хэдли объяснил цель функции dplyr::copy_to()
.
Он предназначен для создания временных тестовых таблиц.
Обмен электронной почтой заканчивается, предлагая использовать RMySQL::dbWriteTable()
для добавления данных в существующую таблицу. То же самое относится к базам данных SQLite, как описано в принятом ответе выше.
Чтобы добавить фрейм данных dtf
, который имеет те же имена столбцов, что и существующая таблица базы данных, я использовал:
library(RMySQL)
DB <- dbConnect(MySQL(), user="usename", host="localhost",
password="***", dbname="dbname")
dbWriteTable(DB, "tablename", dtf, append=TRUE, row.names = FALSE)
Ответ 4
Основная причина, по которой я использую dplyr
для записи в базу данных, заключается в том, что я не хочу переключаться между средним кодом языка. Для вашего вопроса лучшим решением я считаю использование функции db_insert_into()
dplyr
, как показано на StatSandwich