检查 odbc 连接是打开还是关闭

Shi*_*obe 4 database odbc database-connection r

我想编写一个运行以下操作的函数:“如果一个数据库连接已经打开,关闭它并重新打开一个新的”

为此,我需要一种方法来检查连接是否已打开

这是我的连接字符串:

library(odbc)

my_conn_string <- paste("Driver{Teradata};DBCName=teradata2690;DATABASE=PRODUCTION;UID=",
                            username,";PWD=",password, sep="")

t2690 <- dbConnect(odbc::odbc(), .connection_string=my_conn_string)
Run Code Online (Sandbox Code Playgroud)

我想过使用class连接的:

    if (is.null(class(t2690)) { 
t2690 <- dbConnect(odbc::odbc(), .connection_string=my_conn_string) 
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为无论连接是否打开,类都是相同的:

# Class when connected
class(t2690)

[1] "Teradata"
attr(,"package")
[1] ".GlobalEnv"

# Class when not connected
dbDisconnect(t2690)
class(t2690)

[1] "Teradata"
attr(,"package")
[1] ".GlobalEnv"
Run Code Online (Sandbox Code Playgroud)

Kev*_*eau 6

有一个函数DBI::dbIsValid,它是由 导入的odbc。这提供了返回逻辑的通用测试。

con <- dbConnect(RSQLite::SQLite(), ":memory:")    
dbIsValid(con)
# TRUE

dbDisconnect(con)
dbIsValid(con)    
# FALSE
Run Code Online (Sandbox Code Playgroud)

要重新连接断开或清除的连接,您可以根据此值有条件地连接,例如:

if (!dbIsValid(con)) {

  con <- dbConnect(RSQLite::SQLite(), ":memory:")

}
Run Code Online (Sandbox Code Playgroud)