#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()
вызовам.