我使用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仅用新的表更新表。
答案 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)