R: ЗАМЕНИТЬ строки в RSQLite, используя DBI или SQL, когда UNIQUE INDEX существует - PullRequest
0 голосов
/ 11 октября 2018

У меня есть база данных со столбцом, который должен быть уникальным (идентификатор клиента) и связанные столбцы данных (адреса).Есть ли способ обновить строки при изменении адреса клиента?Я бы предпочел сделать это, используя dbplyr или DBI, как и в случае с SQL, мне пришлось бы перебирать строки или загружать все данные в память, заменять, а затем переписывать таблицу, которая ...неэлегант?

Игрушечный пример:

library(dbplyr)
library(DBI)

# create toy dataset
df1 <- data.frame(a = c(1,2,3,4), b=c("a","b","c","d"), stringsAsFactors = F)
df2 <- data.frame(a = c(3,4), b=c("e","f"), stringsAsFactors = F)

df3 <- df1
df3[match(df2$a, df3$a), ] <- df2 # this is the desired result

# create toy RSQLite db
toy_db <- dbConnect(RSQLite::SQLite(),path=":memory:")
dbExecute(toy_db,"CREATE TABLE toy (a INTEGER, b TEXT)")
dbExecute(toy_db,"CREATE UNIQUE INDEX idx ON toy(a)")
copy_to(toy_db,df1,name="test_data")
toy_df <- tbl(toy_db,"test_data")
toy_df[match(df2$a,toy_df$a), ] <- df2 # doesn't work


dbDisconnect(toy_db)
...