5

(对不起,如果这是非常基本的,我只是无法弄清楚)

我有一个表 t 坐在一个 mysql 数据库中,它看起来像这样:(名称是主键)

数据库中的当前表

Name   Balance
 Bob      100
 Ted      150
 Carl     130

我在 R 中也有一个 data.frame,反映了余额的变化

R中的data.frame

Name   Balance
 Bob      90
 Ted      170
 Bill     50

我想执行相当于 mysql replace的操作,以便更新我的表以反映新余额

数据库中的所需表

Name   Balance
 Bob      90
 Ted      170
 Carl     130
 Bill     50

我目前正在使用 RMySQL 包 - 我尝试使用 dbWriteTable 执行此操作,但无法使其正常工作。

Eg1(“插入”)

dbWriteTable(dbConnection, 'tableName', df, row.names=F, append=T)

生产

Name   Balance
 Bob      100
 Ted      150
 Carl     130
 Bill     50

Eg2(“覆盖”)

dbWriteTable(dbConnection, 'tableName', df, row.names=F, append=F, overwrite=T)

生产

Name   Balance
 Bob      90
 Ted      170
 Bill     50

我该如何更换?

4

1 回答 1

0

如果它非常基本,那么我建议使用基本的 SQL 查询。我总是使用 packacke RODBC 连接到 MySQL 数据库。这是我的例子。'conn' 是与您的数据库的连接:

library("RODBC")

df <- data.frame(Name = c('Bob', 'Ted', 'Bill'), Balance = c(90, 170, 50))

for (i in 1:nrow(df)) {
  query <- paste0("REPLACE tablename values ('", paste(df[i, ], collapse = "', '"), "')")
  sqlQuery(conn, query)
}

您可以以任何您喜欢的方式修改查询。上面的代码要求 MySQL 中的表与数据帧具有相同的列。当您使用更大的数据帧时,我建议使用“加载数据(本地)INFILE”。

于 2021-09-01T15:00:26.460 回答