我有一个到数据库文件的 SQLite 数据库连接。我想从其中一个表中提取一些数据,在 R 中进行一些处理,然后从处理过的数据在同一连接上创建一个临时表。它需要是一个临时表,因为用户可能没有对数据库的写入权限,但我希望能够在数据库中已有的数据旁边查询这些新数据。
所以,例如:
require(sqldf)
db <- dbConnect(SQLite(), "tempdb")
dbWriteTable(db, "iris", iris)
# do some processing in R:
d <- dbGetQuery(db, "SELECT Petal_Length, Petal_Width FROM iris;")
names(d) <- c("length_2", "width_2")
d <- exp(d)
然后我想在连接中创建一个临时db
表d
我知道我可以这样做:
dbWriteTable(conn=db, name= "iris_proc", value = d)
但我需要在临时表中使用它,并且在dbWriteTable
.
我想到的一种解决方法是添加一个临时表,然后添加列并更新它们:
dbGetQuery(db, "CREATE TEMP TABLE iris_proc AS SELECT Species FROM iris;")
dbGetQuery(db, "ALTER TABLE iris_proc ADD COLUMN length_2;")
但是我无法从d
列中获取数据:
dbGetQuery(db, paste("UPDATE iris2 SET length_2 =", paste(d$length_2, collapse = ", "), ";"))
Error in sqliteExecStatement(con, statement, bind.data) :
RS-DBI driver: (error in statement: near "4.05519996684467": syntax error)
我想,即使我让这个工作,它也会非常低效。
我认为使用 read.csv.sql 可能有某种方法可以做到这一点,但这似乎不适用于打开的连接对象。