我是否可以仅使用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()将数据帧写入数据库中的临时表. 根据您的架构,您可以执行单个INSERT INTO …在CONFLICT DO UPDATE而不是DELETE然后INSERT. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |