我正在努力简化一些数据库连接。使用odbc
包,我已成功地与其中一个数据库建立了连接,如下所示:
library(odbc)
con <- dbConnect(odbc::odbc(), "db_name",
UID = "username",
PWD = "password")
这个可以工作,数据库模式会如预期地显示在连接面板中(使用RStudio Server 1.1.383
)。
但是,我需要在一个用户定义的函数中调用此连接,该函数解密我们用户的凭据。一个最小的示例:
db_Connect_mod <- function(userid,
password,
...){
# Needed Processes, but ommitted for simplicity of this question
# ...
con <- dbConnect(odbc::odbc(), "db_name",
UID = userid,
PWD = password)
return(con)
}
那么我就运行:
con <- db_Connect_mod(userid, password, ...)
实际的数据库连接
con
成功,但它不再出现在RStudio连接窗格中。我知道
odbc
使用连接契约,但似乎没有传递到我的新函数。有没有办法强制将连接契约传递到顶级函数?我已经尝试使用
odbc:::on_connection_opened(con, code = "...")
,似乎可以工作,但不如从odbc
继承连接契约那样功能强大,并且不想依赖于非导出函数。我认为这种行为是由于来自此odbc github问题的更改造成的。
rstudioapi::sendToConsole()
做同样的事情,但这个方法更简洁。 - der_grund