不要在 dplyr 中自动调用 db_disconnector
Don't call db_disconnector automatically in dplyr
我在我的 Shiny 应用程序中使用 tbl_sql 对象来访问数据库 table。我注意到有时 dplyr 会关闭此连接。可能是因为垃圾收集器调用 db_disconnector。有什么办法可以阻止这种情况吗?我可以在闪亮的关闭事件中关闭连接。
看起来,如果您 d <- src_mysql(...)
(我猜这就是您正在使用的后端,以及您如何连接到数据库?)那么垃圾收集器只会 运行如果 d
超出范围。也许是数据库将连接超时作为管理负载的一种方式?
测试这个的一种方法是编写自己的包装器(而不是 src_mysql()
),它不会断开连接
src_yoursql <-
function (dbname, host = NULL, port = 0L, user = "root", password = "",
...)
{
if (!requireNamespace("RMySQL", quietly = TRUE)) {
stop("RMySQL package required to connect to mysql/mariadb",
call. = FALSE)
}
con <- DBI::dbConnect(RMySQL::MySQL(), dbname = dbname, host = host,
port = port, username = user, password = password, ...)
info <- DBI::dbGetInfo(con)
src_sql("mysql", con, info = info)
}
d = src_yoursql(...)
用
手动关闭它
DBI::dbDisconnect(d$con)
我在我的 Shiny 应用程序中使用 tbl_sql 对象来访问数据库 table。我注意到有时 dplyr 会关闭此连接。可能是因为垃圾收集器调用 db_disconnector。有什么办法可以阻止这种情况吗?我可以在闪亮的关闭事件中关闭连接。
看起来,如果您 d <- src_mysql(...)
(我猜这就是您正在使用的后端,以及您如何连接到数据库?)那么垃圾收集器只会 运行如果 d
超出范围。也许是数据库将连接超时作为管理负载的一种方式?
测试这个的一种方法是编写自己的包装器(而不是 src_mysql()
),它不会断开连接
src_yoursql <-
function (dbname, host = NULL, port = 0L, user = "root", password = "",
...)
{
if (!requireNamespace("RMySQL", quietly = TRUE)) {
stop("RMySQL package required to connect to mysql/mariadb",
call. = FALSE)
}
con <- DBI::dbConnect(RMySQL::MySQL(), dbname = dbname, host = host,
port = port, username = user, password = password, ...)
info <- DBI::dbGetInfo(con)
src_sql("mysql", con, info = info)
}
d = src_yoursql(...)
用
手动关闭它DBI::dbDisconnect(d$con)