我想检查Shiny app中的条件是否存在特定数据库中的mysql表。如果table不存在,则应返回null值。这是我的代码。
loadData <- function(){
db <- dbConnect(MySQL(), dbname = databaseName, host = host,
port = port, user = user, password = password)
res <- dbSendQuery(db, "SELECT * FROM some_table")
final_data <- dbFetch(res)
dbDisconnect(db)
return(final_data)
}
如果数据库中不存在dbSendQuery(db, "SELECT * FROM some_table")
,我想处理some_table
引发的异常。
请帮忙..
答案 0 :(得分:1)
这就是我的工作。也许还有其他更强大或更普遍的东西?
只需“显示表格”作为查询,并检查结果中是否存在您的表名。
loadData <- function() {
db <- dbConnect(
MySQL(),
dbname = databaseName,
host = host,
port = port,
user = user,
password = password
)
rs <- dbSendQuery(con, "show tables")
table.frame <- fetch(rs, n = -1)
if ("some_table" %in% table.frame[, 1]) {
res <- dbSendQuery(db, "SELECT * FROM some_table")
final_data <- dbFetch(res)
dbDisconnect(db)
return(final_data)
} else {
return(NULL)
}
}
答案 1 :(得分:1)
如果表不存在,这将返回null:
...
res <- dbSendQuery(db, "SELECT nullif(count(1),0) tableexists FROM information_schema.tables WHERE table_name='some_table'")
...
您可能还想要包含AND table_schema =&#39;您的架构&#39;,如果您只对某个特定架构中是否存在该表感兴趣