Разрешение конфликта с RSQLite и RMySQL в одном сеансе

#r #rmysql

#r #rmysql

Вопрос:

Я не знаю, что это конфликт RSQLite / RMySQL , но пока это мое лучшее предположение.

Я использую RMySQL для получения данных из базы данных MySQL, затем я закрываю это соединение с dbDisconnect() . Затем я использую эти данные в процессе компоновки записей, используя RLBigDataLinkage() функцию в RecordLinkage пакете. Эта функция использует базу данных SQLite и RSQLite пакет, потому что существует множество возможных совпадений, чтобы сохранить их все в памяти. Насколько я могу судить из документации, нет способа явно закрыть соединение SQLite.

Затем я использую эти совпадения для извлечения большего набора данных из моей базы данных MySQL, снова с помощью RMySQL . Я могу подключиться к базе данных, но при выполнении запроса я получаю следующую ошибку:

 Error in mysqlExecStatement(conn, statement, ...) : 
  RS-DBI driver: (could not run statement: MySQL server has gone away)
  

Это происходит даже с тривиальными запросами.

 > dbGetQuery(db, "SELECT * FROM ann_id_info LIMIT 5")
Error in mysqlExecStatement(conn, statement, ...) : 
  RS-DBI driver: (could not run statement: MySQL server has gone away)
  

Тем не менее, я все еще могу запрашивать из командной строки MySQL.

Есть ли способ отключить «неизвестное» RSQLite соединение? Спасибо!

Комментарии:

1. Я заметил подобный конфликт при использовании sqldf и RMySQL, но я не использовал Recordlink — можете ли вы привести простой пример, чтобы воспроизвести ошибку? IIRC, нам нужно найти способ указать путь к базе данных SQLite вместо использования значения по умолчанию.

2. @Jeffrey — Я написал независимый пример кода, и это сработало! И я снова изучил свой исходный код и обнаружил, что у меня был сбой в запросе, который я исправил, и он сработал! Итак, теперь я доволен, но на самом деле интересно, почему мой тривиальный запрос выше завершается неудачей после выполнения неправильного запроса? Я голосую за закрытие, пока не смогу создать более повторяемую проблему.

3. @Jeffrey, версия для разработки sqldf (доступна на веб-сайте sqldf) поддерживает как MySQL, так и SQLite. Посмотрите, решит ли это ваш конфликт.

4. @G. Grothendieck — Спасибо, я посмотрю. В прошлом я всегда разрешал конфликт, добавляя явное drv='SQLite' к моим sqldf() вызовам.