如何检查RMysql

时间:2016-10-22 15:39:31

标签: mysql r shiny rmysql

我想检查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引发的异常。 请帮忙..

2 个答案:

答案 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;,如果您只对某个特定架构中是否存在该表感兴趣