【问题标题】:R: Update a mysql table with data frameR:使用数据框更新 mysql 表
【发布时间】:2022-06-19 03:24:09
【问题描述】:

我有一个 MariaDB,我想用本地 R 数据框更新一个表。例如,我有一个包含这些列名的表:

id,foo,bar

id是数据库表的主键。

有没有可以用我的本地数据框轻松更新远程数据库的功能?理想情况下,我正在寻找这样的东西:

update_table(con, remote_table_name, local_data_frame, primary_key="id")

我知道我可以将这样的 SQL 语句写成一个字符串,然后用DBI::dbSendStatement(con, query) 执行它:

INSERT INTO mytable (id, foo, bar)
VALUES (1, 'a1', 'b1'),
(2, 'a2', 'b2'),
(3, 'a3', 'b3'),
(4, 'a4', 'b4'),
ON DUPLICATE KEY UPDATE id=VALUES(id),
foo=VALUES(foo),
bar=VALUES(bar)

但是,如果这个看似简单的操作没有开箱即用的解决方案,我会感到惊讶。有人知道这样的功能是否嵌入到包中?

【问题讨论】:

  • dbx 包支持 upserts,不确定它在 mariadb 中的状态。您的查询只是定制的,因为您手动插入数据;我这样做的方法是将要更新的数据dbWriteTable 更新到数据库上的临时表中,然后使用从临时表到要更新的表的INSERT ... ON DUPLICATE ... 查询。这种方式更加通用,并且受益于其他现有的 DBI 函数。
  • dbx 包正是我所需要的。感谢您为我指明正确的方向。

标签: r dbi rmysql dbplyr


【解决方案1】:

dbx 包有一个功能正是我需要的:

dbxUpdate(db, table, records, where_cols=c("id"))

它确实适用于 MariaDB。

【讨论】:

    【解决方案2】:

    现在,dbplyr 包也有 rows_update()

    rows_update(table, records, by = "id", copy = TRUE)
    

    【讨论】:

      猜你喜欢
      • 2019-06-04
      • 2020-12-14
      • 1970-01-01
      • 2012-06-03
      • 2017-06-06
      • 2021-04-16
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多