Подтвердить что ты не робот

Можно ли вставить (добавить) строку в таблицу 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? Или как вы справитесь с этой проблемой? Большое спасибо заранее!

4b9b3361

Ответ 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