Как чисто отключиться от MySQL в R?

2

Эта функция не закрывает соединения должным образом (поэтому я достигаю максимального предела 16, что явно не хорошо):

query.test = function(query) {
  con = dbConnect(MySQL(), groups = 'test')
  output = tryCatch({
    dbGetQuery(con, query)
    }, warning = function(w) {
      print(w)
    }, error = function(e) {
      print(e)
    }, finally  = function() {
      dbDisconnect(con)
    })
  return(output)
}

Я думал, что инструкции в предложении finally всегда выполняются, поэтому мне непонятно, почему этот код не работает.

  • 0
    почему бы вам не подключиться один раз в верхней части страницы? Запустите все свои запросы на странице без необходимости подключения, а затем просто закройте его один раз внизу страницы.
  • 0
    @nathanhayfield Есть много способов сделать то же самое, но я специально спрашиваю, почему этот способ не работает. Я пытаюсь узнать что-то новое здесь.
Показать ещё 2 комментария
Теги:

1 ответ

2

Ответ оказывается немного странным (для меня) R синтаксисом:

query.test = function(query) {
  output = tryCatch({
    con = dbConnect(MySQL(), groups = 'test')
    dbGetQuery(con, query)
    }, warning = function(w) {
      print("warning!")
    }, error = function(e) {
      print("error encountered!")
      print(e)
    }, finally = {
      dbDisconnect(con)
      print("goodbye")
    })  
  return(output)
}

Разница здесь:

}, finally  = function() {
      dbDisconnect(con)
    })

должно быть

}, finally  = {
      dbDisconnect(con)
    })

Если кто-нибудь поймет, почему, finally, не работает первый способ, я был бы признателен за это.

  • 1
    Я считаю, что различие заключается в том, что warning и error ожидают «обработчики», то есть функции, в то время как, finally , ожидает только выражение. Сканируя документацию, мне кажется разумным, что это может быть несколько яснее в этом вопросе, я полагаю.
  • 0
    @joran Да, похоже, это так. Должна быть какая-то техническая причина, почему, наконец, обрабатывается по-другому.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню