我是否可以仅使用R中的dplyr语法运行SQL更新语句

前端之家收集整理的这篇文章主要介绍了我是否可以仅使用R中的dplyr语法运行SQL更新语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要更新某些Postgresql数据库表中其他列的条件值.我设法在R中编写sql语句并使用DBI包中的dbExecute执行它.
library(dplyr)
library(DBI)

# Establish connection with database
con <- dbConnect(RPostgresql::Postgresql(),dbname = "myDb",host="localhost",port= 5432,user="me",password = myPwd)

# Write sql update statement
request <- paste("UPDATE table_to_update","SET var_to_change = 'new value' ","WHERE filter_var = 'filter' ")

# Back-end execution
con %>% dbExecute(request)

是否可以仅使用dplyr语法执行此操作?出于好奇,我试过了,

con %>% tbl("table_to_update") %>%
   mutate(var_to_change = if (filter_var == 'filter') 'new value' else var_to_change)

它在R中工作但显然在db中没有任何作用,因为它使用了一个select语句. copy_to只允许附加和覆盖选项,所以我看不到如何使用它,除非删除然后附加过滤后的观察…

解决方法

当前的dplyr 0.7.1(使用dbplyr 1.1.0)不支持功能,因为它假定所有数据源都是不可变的.通过dbExecute()发出UPDATE似乎是最好的选择.

要替换表中较大的块,您还可以:

>通过copy_to()将数据帧写入数据库中的临时表.
>开始交易.
>发出DELETE FROM … WHERE id IN(SELECT id FROM< temporary table>)
>发出INSERT INTO … SELECT * FROM< temporary table>
>提交交易

根据您的架构,您可以执行单个INSERT INTO …在CONFLICT DO UPDATE而不是DELETE然后INSERT.

原文链接:https://www.f2er.com/mssql/76965.html

猜你在找的MsSQL相关文章