有多种方法可以删除表中的所有记录。
你可以TRUNCATE或DELETE
dbExecute(con, "TRUNCATE TABLE TableName")
dbExecute(con, "DELETE FROM TableName")
Run Code Online (Sandbox Code Playgroud)
编辑:使用dbExecute()而不是dbSendQuery().
正如文档中所评论的 dbSendQuery()
此方法仅适用于 SELECT 查询。出于兼容性原因,某些后端可能会通过此方法支持数据操作查询。但是,强烈建议调用者将 dbSendStatement() 用于数据操作语句。
但是,send方法不会自动清除返回的结果对象。因此get和execute方法更适合交互使用。从dbSendStatement()文档:
要查询受影响的行数,请对返回的结果对象调用 dbGetRowsAffected()。您还必须在此之后调用 dbClearResult()。对于交互式使用,您几乎总是更喜欢 dbExecute()。
小智 7
要回答另一个用例,当您需要从数据库中仅删除某些记录时,您可以创建一个查询列表,然后使用映射来执行它们。例如,下一个代码将删除 id 为 1 到 5 的行。
library(purrr) # for the map() function
# listing the ids we want to delete
ids = c(1,2,3,4,5)
# creating list of DELETE queries with each id
delete_queries = paste0("DELETE FROM tablename WHERE (id = '", ids, "');")
# executing each query
map(.x = delete_queries, .f = dbExecute, conn = con)
Run Code Online (Sandbox Code Playgroud)
请注意,我们使用 dbExecute 而不是 dbSendQuery,因为它返回受影响的记录数,因此我们可以确定操作已发生。