如何从R.Data向SQLite数据库插入值?

如何从R.Data向SQLite数据库插入值?,sql,r,database,rsqlite,Sql,R,Database,Rsqlite,我正试图从Rdata.frame向sqlite数据库插入数据,但失败了 这是我在R studio中使用的代码 因此,我尝试使用两个循环加载指定文件夹(工作目录)中列出的所有dbf文件。然后我试图通过sqldf或dbExecute函数将Rdata.frame(df[[1]])中的数据插入sqlite数据库(我已经创建了它) 在dbExecute的情况下,函数无法从Rdata.frame读取表格(在这种情况下df[[1]]) 在sqldf的情况下,该函数不会看到数据库中先前创建的所有\u banks

我正试图从R
data.frame
向sqlite数据库插入数据,但失败了

这是我在R studio中使用的代码

因此,我尝试使用两个循环加载指定文件夹(工作目录)中列出的所有
dbf
文件。然后我试图通过
sqldf
dbExecute
函数将R
data.frame
df[[1]]
)中的数据插入
sqlite
数据库(我已经创建了它)

dbExecute
的情况下,函数无法从R
data.frame
读取表格(在这种情况下
df[[1]]

sqldf
的情况下,该函数不会看到数据库中先前创建的所有\u banks表

有没有办法解决这个问题? 谢谢大家

library(sqldf)
library(DBI)
library(foreign)
library("RSQLite")



setwd("F:~/Data")
con <- dbConnect(RSQLite::SQLite(), dbname = "banks.db")
for(path in c("F:~/123-20190901",
          "F:~/123-20190801")){
  setwd(path)
  ldf <- list()
  listdbf <- dir(pattern = "*.DBF")
  for (k in 1:length(listdbf)){
     ldf[[k]] <- read.dbf(listdbf[k])
     }

  df1 <- ldf[[1]]
  df2 <- ldf[[2]]
  dbExecute(con, "insert into all_banks select DT, REGN, name_b from df1")
  sqldf("insert into all_banks select DT, REGN, name_b from df1")
}
dbDisconnect(con)

Error: no such table: df1
Error: no such table: all_banks
库(sqldf)
图书馆(DBI)
图书馆(外文)
图书馆(“RSQLite”)
setwd(“F:~/Data”)

con基本上,
sqldf
dbExecute
是两个不同的过程,前者在本地环境中工作,后者在外部数据库中工作(尽管有明显的例外)

sqldf是一个R包,用于在R数据帧上运行SQL语句,为方便起见进行了优化

因此,
sqldf
,在本地环境中的R个数据帧上运行。默认情况下,
sqldf
不用于对持久的外部数据库进行更改。从技术上讲,它运行一个内存中的SQLite数据库,该数据库在R会话之后不会保存。因此,如果在全球环境中,所有的银行都不是一个数据帧,它将不会被
sqldf
识别。尽管如此,仍然存在一种将
sqldf
与永久性SQLite数据库一起使用的方法。但下面的解决方案可以说更容易


Per,
DBI::dbExecute

执行语句并返回受影响的行数

第一个论点是:

conn
:由
dbConnect()
返回的DBIConnection对象

因此,
dbExecute
在外部数据库上运行命令,并且在其范围内不使用本地环境对象。因此,若df1不是数据库中的表,则它将不会被
dbExecute
识别


解决方案

要解决数据库附加需求,只需使用DBI,它将本地R数据帧推送到外部数据库表中(假设两个端点上的结构相同,除非使用
overwrite=TRUE
)。即使在关闭数据库连接或R会话之后,对表的此类更改仍将保持永久性

dbWriteTable(con, name="all_banks", value=df1, append=TRUE)