gpt4 book ai didi

r - 在函数内调用 `odbc` 连接未显示在 RStudio 连接 Pane 中

转载 作者:行者123 更新时间:2023-12-04 13:03:09 31 4
gpt4 key购买 nike

我正在努力简化一些数据库连接。使用 odbc包,我已经成功地与我的一个数据库建立了连接,如下所示:

library(odbc)
con <- dbConnect(odbc::odbc(), "db_name",
UID = "username",
PWD = "password")

这有效,并且数据库架构按预期显示在连接 Pane 中(使用 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 连接 Pane 中。

我知道 odbc使用 Connections Contract ,但它似乎并没有延续到我的新功能。有没有办法强制连接契约(Contract)转移到顶级功能?

我看过使用 odbc:::on_connection_opened(con, code = "...") ,这似乎有效,但不如从 odbc 继承连接契约(Contract)那样有效。在我的新函数中,宁愿不依赖非导出函数。

我相信这种行为是由于 this odbc github issue 的变化所致。

最佳答案

似乎没有太大兴趣,但发布了我一直在使用的解决方法:

我正在使用 match.call()收集参数,然后将其解析为 odbc:::on_connection_opened()功能如前所述。可能不是最佳实践,但嘿它有效。

我添加了逻辑参数 connection_pane轻松关闭或打开此功能:

internal_package::db_Connect_mod <- function(userid,
password,
connection_pane,
...){

# Needed Processes, but ommitted for simplicity of this question
# ...

con <- dbConnect(odbc::odbc(), "db_name",
UID = userid,
PWD = password)

if(connection_pane){
code <- c(match.call()) # This saves what was typed into R

odbc:::on_connection_opened(
con,
paste(c("library(internal_package)",
paste("con <-", gsub(", ", ",\n\t", code))),
collapse = "\n"))
}
return(con)
}

想象一下,使用 glue 看起来会更漂亮。或 stringr进一步改进

关于r - 在函数内调用 `odbc` 连接未显示在 RStudio 连接 Pane 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48936851/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com