【发布时间】:2018-08-23 22:35:01
【问题描述】:
除了将整个表追加或覆盖到数据库之外,RMySQL 中是否有任何函数可以只更新表的一部分?因为有一天我们的一些数据可能不完整,我需要保留旧表并只替换有新数据进入的行,这是我编写的函数,但没有工作,任何帮助将不胜感激:
col.info <- "(id int, timestamp bigint, yyyy int, mm int, dd int, value double,
PRIMARY KEY(id, timestamp, yyyy, mm, dd))"
Func <- function(con, tbl.name, dat.set, col.info) {
if (dbExistsTable(con, tbl.name)) {
dbWriteTable(con, tbl.name, dat.set, row.names=F, append=T); #what can I change the append for??
} else {
dbSendQuery(con, paste("CREATE TABLE IF NOT EXISTS", tbl.name, col.info, sep=" "));
dbWriteTable(con, tbl.name, dat.set, row.names=F, append=T);
}
}
Func(conn_table, "daily_update", df, col.info)
【问题讨论】:
-
您可以使用 dbSendQuery。你说它不起作用,但是如何?你得到什么消息?其次,我会将该函数称为 dailyUpdate 而不是 Func。
-
我刚刚再次运行了代码,这次成功了!!但是上次整个表都重复了,我是数据库新手,所以如果主键在那里,表不应该有重复的行,对吗?谢谢。
-
是的!主键在数据行中是唯一的。
-
谢谢@agstudy,明天我会运行数据,希望一切顺利,不胜感激。
-
上次我只是运行上面的代码,但是当我运行整个代码时,整个表又重复了,我发现问题是时间戳,每次都会生成一个新的数字,因此,行变得不同,我试图删除主键中的时间戳,但似乎没有帮助