RMYSQL-插入忽略,替换-R

时间:2014-09-04 13:57:05

标签: r rmysql

我使用RMySQL包从R将数据导出到MySQL数据库。我面临的一个大问题是重复:我有太多条目具有相同的值。系统自动生成结果并将数据框插入数据库。

DB中的当前表:

Name   Balance  
Bob      100
Ted      150
Carl     130

我在R中也有一个反映更改余额的数据框(df):

> df
    Name   Balance
[1] Bob      100
[2] Ted      150
[3] Bill     50

要插入数据库的数据:

Name   Balance
Bill     50

现在插入后,Table应如下所示:

Name   Balance
 Bob      100
 Ted      100
 Carl     130
 Bill     50

但我的dbwrite产生了这个:

Name   Balance
 Bob      100
 Ted      100
 Carl     130
 Bob      100
 Ted      150
 Bill     50

我正在使用此代码:

dbWriteTable(con, "DB Table name", rbind(Dataframe), row.names=FALSE,append=TRUE)

有没有办法检查现有的并使用R中的RMYSQL仅用新的表更新表。

1 个答案:

答案 0 :(得分:-1)

而不是使用dbWriteTable()使用dbSendQuery()。您可以构建SQL查询以插入数据框的每一行:

df <- data.frame(name=c('Bob','Ted','Bill'), balance=c(100,150,50))
strSQL <- paste(
  'insert into your_table (name, balance) values',
  paste(sprintf("('%s', %f)", df$name, df$balance), collapse=', '),
  'on duplicate key update balance = values(balance)',
  sep = ' '
)
# The query will be something like this:
#           insert into your_table (name, balance)
#           values ('Bob', 100.000000), ('Ted', 150.000000), ('Bill', 50.000000) 
#           on duplicate key update balance = values(balance);
# Important: If you want this to work, you must ensure that there's a unique
# index on column 'name' in your_table
dbSendQuery(con, strSQL)