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 中的非向后兼容更改引起的;然而,如前所述,实际操作仍然有效。
还有 delete
和 update
作用于数据库中的 table。它们没有 return 值,因此即使它们有效,您也看不到任何结果。如果你想要一个结果,你必须在 delete
或 update
之后使用 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
我想知道 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 中的非向后兼容更改引起的;然而,如前所述,实际操作仍然有效。
还有 delete
和 update
作用于数据库中的 table。它们没有 return 值,因此即使它们有效,您也看不到任何结果。如果你想要一个结果,你必须在 delete
或 update
之后使用 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