是否可以使用dplyr包将一行插入(添加)到SQLite数据库表?

rda*_*tor 24 sqlite r dplyr

我是dplyr包的数据库连接功能的新手,但我对将它用于SQLite连接非常感兴趣.我按照本教程创建了一个SQLite数据库(my_db)

my_db <- src_sqlite("my_db.sqlite3", create = T)
Run Code Online (Sandbox Code Playgroud)

并插入一个数据帧(df)作为该数据库的表(my_table).

copy_to(my_db,df,"my_table")
Run Code Online (Sandbox Code Playgroud)

现在我想在此表中插入新行.我试过这样的事情(是的,我必须承认它看起来没什么前途......但我还是试了一下):

collect(build_sql("INSERT INTO my_table VALUES (",newdf,")", con=my_db))
Run Code Online (Sandbox Code Playgroud)

有没有人知道是否可以使用dplyr向现有的sqlite db表添加行?或者您将如何处理这个问题?提前谢谢了!

Sta*_*ich 56

不,你可以在里面做到这一切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
Run Code Online (Sandbox Code Playgroud)

  • 你_can_,但你不应该.dplyr专门用于从数据库中检索数据,而不是在适当的位置进行修改.这个答案使用内部函数 - 我强烈建议不要使用这些函数. (6认同)

Pau*_*eux 13

这个新闻组中.哈德利解释了这个功能的目的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)
Run Code Online (Sandbox Code Playgroud)


hrb*_*str 10

可以对通过创建的数据库/表执行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")')
Run Code Online (Sandbox Code Playgroud)

  • 不要手动构造查询,最好使用`dbWriteTable(append = TRUE)` (8认同)