我正在从一个mysql表导入一些数据,但到目前为止,为了检查数据更新,我只是在重新加载应用程序。我希望这是动态发生的,但我不知道如何在我的代码中实现invalidaterater函数,或者我是否应该这样做,因为我看到有人推荐reactivepoll。基本上,我接收到的数据进入我的数据库从5到5分钟,我想检查数据库在一定的间隔太和更新数字显示在我的值框。
谢谢!
shinyServer(function(input, output, session) {
conn <- dbConnect(RMySQL::MySQL(),
dbname="db",
host="localhost",
user="root",
password="password")
table<- dbReadTable(conn = conn, name ='table1', value= as.data.frame(table))
prd_number <- dbFetch(dbSendQuery(conn, "SELECT obj FROM table1 ORDER BY id DESC LIMIT 1"))
output$prdnumber <- shinydashboard::renderValueBox({
shinydashboard::valueBox(prd_number, "Number of products", icon=icon("tags"), color="purple"
)
})
})
更新
我实现了我想要的,但现在我做到了:
好奇:有必要为每个不同的查询定义一个新的reactivepoll吗(例如:一个reactivepoll函数用于从数据库获取某个字段,另一个reactivepoll函数用于从数据库获取整个表)
错误:列0中更确切地说是无法识别的mysql字段类型7作为字符导入。我知道这是因为我的表中有时间戳,但我不知道如何处理它们。我看到一种解决方案可能是将其转换为unix时间戳,但我希望将日期打印到 Jmeter 板,因此这不是一个好的选择。
服务器.r
prd_number <- reactivePoll(20000, session, checkFunc = function(){
conn <- dbConnect(RMySQL::MySQL(),
dbname="db",
host="localhost",
user="root",
password="password")
val1 <- dbGetQuery(conn, "SELECT obj FROM table ORDER BY id DESC LIMIT 1")
val2 <- dbGetQuery(conn, "SELECT date FROM table ORDER BY id DESC LIMIT 1")
output$prdnumber <- shinydashboard::renderValueBox({
shinydashboard::valueBox(val1, "Number of items", icon=icon("tags"), color="purple"
)
})
output$update <- shinydashboard::renderValueBox({
shinydashboard::valueBox(val2, "Last update", icon=icon("tags"), color="lime"
)
})
dbDisconnect(conn)
})
1条答案
按热度按时间j91ykkif1#
这不是你用的方法
reactivePoll
我相信,reactivePoll
是的,好吧reactive
.reactivePoll
跑checkFunc
每intervalMillis
,如果checkFunc
返回与以前不同的值valueFunc
正在运行。也从不更新你的
output
在你的React物里面,把它们移到React物外面。在上面,更改
checkFunc
. 它现在每2分钟返回一次当前时间valueFunc
正在运行。你不想那样。在
valueFunc
,您应该使用廉价的sql语句ping数据库,以检查感兴趣的表是否已更新:即:return last row=>if the last row has changed,valueFunc
运行和输出(使用prd_number
)将更新。