如何使用RMySQL包更新MySQL表

时间:2012-12-11 20:51:21

标签: r rmysql

不是将整个表追加或覆盖到数据库,而是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)

1 个答案:

答案 0 :(得分:1)

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

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

install.packages("dbx")
library(dbx)
dbx::dbxUpsert(con, tbl.name, dat.set, where_cols = c("id"))