R подключение к sqlite

Невозможно подключиться к sqlite из R. Sqlite3 установлен на сервере linxu и может создавать/изменять. Но R не подключается.

library(dplyr)
library(RSQLite)

> db <- src_sqlite("my_db.sqlite3", create = TRUE)
Error in .local(drv, ...) : Could not connect to database:
unable to open database file

Возможность подключения к sqlite из командной строки

@ubuntu:~$ sqlite3
SQLite version 3.8.2 2013-12-06 14:53:30
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> 

Вот информация о сеансе

sessionInfo() R версия 3.2.2 (14 августа 2015 г.) Платформа: x86_64-pc-linux-gnu (64-разрядная версия) Работает под: Ubuntu 14.04.1 LTS

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RSQLite_1.0.0 DBI_0.3.1     dplyr_0.4.3  

loaded via a namespace (and not attached):
[1] magrittr_1.5   R6_2.1.1       assertthat_0.1 parallel_3.2.2 tools_3.2.2   
[6] Rcpp_0.12.1   
> 

person Antex    schedule 13.09.2015    source источник


Ответы (2)


SQLite — это база данных на уровне файлов, поэтому для ссылки на нее требуется полный путь к каталогу. Нет, где вы указываете рабочий каталог или полный путь в имени файла.

По умолчанию R будет использовать текущий рабочий каталог, содержащийся в getwd(). Если база данных не содержится в этой папке, то возникнет ошибка подключения. Вы можете изменить рабочий каталог с помощью setwd().

Кстати, вы ссылаетесь на оба пакета, но подключаетесь к SQLite с пакетом dplyr, используя src_sqlite. , а не с RSQLite.

Подключение RSQLite

library(RSQLite)

setwd("/Path/To/Database/Folder")
sqlite <- dbDriver("SQLite")
conn <- dbConnect(sqlite,"my_db.sqlite3")

Подключение DPLYR

library(dplyr)

setwd("/Path/To/Database/Folder")
db <- src_sqlite("my_db.sqlite3", create = TRUE)

Возможно, вы не захотите вызывать обе библиотеки вместе, чтобы избежать конфликта функций с одинаковыми именами.

person Parfait    schedule 13.09.2015
comment
Спасибо за объяснение и отклик. Я использую соединение dplyr. хотя я специально не устанавливал setwd(), я согласен с тем, что R выбирает путь по умолчанию. Я испытываю это в Linux, в OS-X я не вижу этой проблемы. Я также запрограммировал путь с помощью setwd(), просто чтобы убедиться, что установка пути не является проблемой, с тем же результатом. db1 ‹- src_sqlite(db1.sqlite3, create = T) Ошибка в .local(drv, ...): Не удалось подключиться к базе данных: невозможно открыть файл базы данных - person Antex; 13.09.2015
comment
В Linux вы должны предоставить доступ для чтения/записи к отдельным файлам и папкам. Обязательно сделайте это до подключения R. - person Parfait; 13.09.2015

Как указано в виньетке RSQLite:

RSQLite — это интерфейс, совместимый с DBI, что означает, что вы в основном используете функции, определенные в пакете DBI, поэтому вам всегда следует начинать с загрузки DBI, а не RSQLite:

library(DBI)

После загрузки DBI в вашей среде вы можете подключиться к существующей базе данных или создать новую:

dbh <- dbConnect(RSQLite::SQLite(), "mydb.sqlite")
dbDisconnect(dbh)
#> [1] TRUE
unlink("mydb.sqlite")

Вы найдете больше примеров в приведенной выше ссылке на виньетку RSQLite. У меня также есть несколько примеров в моем блоге. Надеюсь, это поможет! :)

person Antonio    schedule 02.12.2016