【发布时间】: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包正是我所需要的。感谢您为我指明正确的方向。