2

RMySQL 中是否有任何函数可以仅更新表的一部分,而不是将整个表附加或覆盖到数据库中?因为有一天我们的一些数据可能不完整,我需要保留旧表并只替换有新数据进入的行,这是我编写的函数,但没有工作,任何帮助将不胜感激:

col.info <- "(id int, timestamp bigint, yyyy int, mm int, dd int, value double, 
PRIMARY KEY(id, timestamp, yyyy, mm, dd))"

Func <- function(con, tbl.name, dat.set, col.info) {
  if (dbExistsTable(con, tbl.name)) {  
  dbWriteTable(con, tbl.name, dat.set, row.names=F, append=T);  #what can I change the append for??

  } else { 
  dbSendQuery(con, paste("CREATE TABLE IF NOT EXISTS", tbl.name, col.info, sep=" ")); 
  dbWriteTable(con, tbl.name, dat.set, row.names=F, append=T);
  }
} 

Func(conn_table, "daily_update", df, col.info)
4

1 回答 1

3

我最近遇到了完全符合您需要的dbx 包。

以下代码将在您的数据库表上执行 upsert(重复键更新)查询。只需将 where_cols 参数替换为作为主键的列。

install.packages("dbx")
library(dbx)
dbx::dbxUpsert(con, tbl.name, dat.set, where_cols = c("id"))
于 2017-11-19T11:52:57.253 回答