以 mysql REPLACE 方式将 R data.frame 插入到 mysql 表中

use*_*943 5 mysql r rmysql

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

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

数据库中的当前表

Name   Balance
 Bob      100
 Ted      150
 Carl     130
Run Code Online (Sandbox Code Playgroud)

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

R中的数据框

Name   Balance
 Bob      90
 Ted      170
 Bill     50
Run Code Online (Sandbox Code Playgroud)

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

数据库中的所需表

Name   Balance
 Bob      90
 Ted      170
 Carl     130
 Bill     50
Run Code Online (Sandbox Code Playgroud)

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

Eg1(“插入”)

dbWriteTable(dbConnection, 'tableName', df, row.names=F, append=T)
Run Code Online (Sandbox Code Playgroud)

生产

Name   Balance
 Bob      100
 Ted      150
 Carl     130
 Bill     50
Run Code Online (Sandbox Code Playgroud)

Eg2(“覆盖”)

dbWriteTable(dbConnection, 'tableName', df, row.names=F, append=F, overwrite=T)
Run Code Online (Sandbox Code Playgroud)

生产

Name   Balance
 Bob      90
 Ted      170
 Bill     50
Run Code Online (Sandbox Code Playgroud)

我该如何更换?

小智 0

如果它非常基本,那么我建议使用基本的 SQL 查询。我总是使用 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)
}
Run Code Online (Sandbox Code Playgroud)

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