加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 07:09:03 所属栏目:MsSql教程 来源:网络整理
导读:我需要更新某些PostgreSQL数据库表中其他列的条件值.我设法在R中编写SQL语句并使用DBI包中的dbExecute执行它. library(dplyr)library(DBI)# Establish connection with databasecon - dbConnect(RPostgreSQL::PostgreSQL(),dbname = "myDb",host="localhost",
我需要更新某些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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读