R使用sqldf从数据table中删除行

R delete rows from data table using sqldf

我想知道 R 是否不支持使用 sqldf 从数据 table 中删除行。我的数据看起来像这样

我正在尝试使用删除语句从数据 table 中删除。没有底层数据库只有 data.table。但是当我输入以下 sql 语句时:

loans_good <- sqldf("Delete from LoansDT1 where status not in ('Current','Default')")

我收到以下错误消息:

'SQL statements must be issued with dbExecute() or dbSendStatement() instead of dbGetQuery() or dbSendQuery().' 

由于我收到相同的更新消息,我想知道这是否是一个限制。

您需要使用dbExecute()来执行删除、更新或插入查询。

conn <- dbConnect("Put your connection to your database here")

dbExecute(
  conn,
  "Delete from LoansDT1 where status not in ('Current','Default')"
)

dbReadTable(conn, LoansDT1) # Check

这个问题是一个常见问题解答。请参阅 sqldf github home page.

上的常见问题解答 8

手术成功了。该消息是警告消息,而不是错误消息。该消息具有误导性,您可以忽略它。请注意,该问题没有显示完整的消息——完整的消息确实表明这是一条警告消息。

警告消息来自 RSQLite,而不是 sqldf 本身。它是由在某些时候引入到 RSQLite 中的非向后兼容更改引起的;然而,如前所述,实际操作仍然有效。

还有 deleteupdate 作用于数据库中的 table。它们没有 return 值,因此即使它们有效,您也看不到任何结果。如果你想要一个结果,你必须在 deleteupdate 之后使用 select 语句来检索修改后的 table.

这里是一个使用内置 6 行 BOD data.frame 的例子。它删除最后一行,因为该行的时间大于 5。

library(sqldf)

sqldf(c("delete from BOD where Time > 5", "select * from BOD"))
##   Time demand
## 1    1    8.3
## 2    2   10.3
## 3    3   19.0
## 4    4   16.0
## 5    5   15.6
## Warning message:
## In result_fetch(res@ptr, n = n) :
##   SQL statements must be issued with dbExecute() or dbSendStatement() instead of dbGetQuery() or dbSendQuery().

请注意,这在 sqldf 问题中列出,其中提供了消息的解决方法:https://github.com/ggrothendieck/sqldf/issues/40