我对光亮和R非常新,但是使用闪亮的我试图连接到数据库从那里获取数据.当我试图在浏览器上连续访问我的RShiny工作时,我得到了一个错误Cannot allocate a new connection: 16 connections already opened
.我怎样才能克服这个错误或者Rshine一次只能期待16个用户?我有另一个堆栈帖子在这里RStudio闪亮错误mysqlNewConnection最大16个连接,但解释上面的网址不清楚.
Tha*_*oat 45
obj <- dbConnect(...)
每次在代码中发送查询时,可能都会打开一个新的数据库连接.您可以dbDisconnect(obj)
在查询执行后每次调用您创建的对象以杀死相应的连接.
您也可以使用此功能立即终止所有打开的连接:
library(RMySQL)
killDbConnections <- function () {
all_cons <- dbListConnections(MySQL())
print(all_cons)
for(con in all_cons)
+ dbDisconnect(con)
print(paste(length(all_cons), " connections killed."))
}
Run Code Online (Sandbox Code Playgroud)
我建议在闪亮的外面写一个小函数来处理整个打开和关闭的事情:
library(RMySQL)
sqlQuery <- function (query) {
# creating DB connection object with RMysql package
DB <- dbConnect(MySQL(), user="youruser", password='yourpassword', dbname='yourdb', host='192.168.178.1')
# close db connection after function call exits
on.exit(dbDisconnect(DB))
# send Query to btain result set
rs <- dbSendQuery(DB, query)
# get elements from result sets and convert to dataframe
result <- fetch(rs, -1)
# return the dataframe
return(result)
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
Kev*_*rca 11
如果遇到此问题,应首先以交互方式运行以下代码,以断开与MySQL数据库的所有连接:
lapply(dbListConnections(MySQL()), dbDisconnect)
Run Code Online (Sandbox Code Playgroud)
(请注意,如果使用其他数据库管理系统,则可以使用其他DBI驱动程序替换MySQL()).
只需command/ctrl + shift + F10
在RStudio上重启R session:
你需要告诉闪亮的如何正确断开连接.那部分取决于用例.如果你每次开始闪亮时都开始连接,你可以添加内部server.ui
:
session$onSessionEnded(function(){
dbDisconnect(con)
}
Run Code Online (Sandbox Code Playgroud)
哪里是你的联系.如果每次运行查询时都启动了连接,则必须在查询运行后立即断开连接.
您还应该看看闪亮团队建议的pool
包管理连接.关于数据库的Shiny Articles还有一个非常有用的部分.