Подключите R к SQL Server в MAC - PullRequest
0 голосов
/ 14 мая 2019

Я хочу подключить R к SQL Server на моем MAC (El Capitan), я могу сделать это очень легко в Python, но в RI не могу это сделать.

В Python это просто, как:

import pymssql
pymssql.connect(server = 'CHWN-DSX-DB02', user = 'XXXX',password ='XXXX',database = 'Info')

Для R, я пытался с библиотекой RODBC, но не работал, я думаю, что проблема в «Драйвере»:

driver.name <- "SQL Server"
db.name <- "Info"
host.name <- "CHWN-DSX-DB02"
port <-""
server.name <-"XXX"
pwd <- "XXX"
# Use a full connection string to connect to a SAMPLE database
con.text <- paste("DRIVER=",RMySQL::MySQL(),
                  ";Database=",db.name,
                  ";Server=",host.name,
                  ";Port=",port,
                  ";PROTOCOL=TCPIP",
                  ";UID=", server.name,
                  ";PWD=",pwd,sep="")

con1 <- odbcDriverConnect(con.text)

Этот код в R никогда не заканчивается,и когда я его прекращаю, у меня появляется следующее предупреждение:

Предупреждающие сообщения:
1: в odbcDriverConnect (con.text):
[RODBC] ОШИБКА: состояние 00000, код 0,сообщение [iODBC] [Driver Manager] dlopen (SQL Server, 6): изображение не найдено

1 Ответ

0 голосов
/ 11 июня 2019

Есть несколько проблем с вашей текущей настройкой:

  1. Общие и специальные API : В Python вы используете определенный SQL Server API: pymssql,Если сравнивать с вашей попыткой R, вы должны использовать ODBC API: pyodbc (для сравнения с RODBC).Помните, что есть несколько способов подключения к серверным базам данных или хранилищам данных из клиентских приложений с помощью определенных API или обобщенных API (ODBC, OLEDB, JDBC и т. Д.).

  2. ТребуетсяДрайверы : Чтобы использовать любую библиотеку ODBC, будь то Python, R или другой язык, на вашем клиентском компьютере должен быть установлен драйвер ODBC.Загрузите такие драйверы до попытки подключения.Почти каждая СУБД или хранилище данных поддерживает (обычно бесплатно загружаемые) драйверы ODBC для ОС Windows, Mac и Linux, включая SQL Server: 2013 или 2017 .

  3. Микширование библиотек R : В R большинство API соответствуют стандарту DBI, включая ROracle, RJDBC, odbc, RMySQL, RPostgreSQL, RSQLite.К сожалению, RODBC не соответствует этому стандарту.Ваша попытка подключения выглядит как попытка подключения DBI с использованием объекта RMySQL::MySQL(), который даже в DBI не является частью строки подключения ODBC.

    Обратите внимание, даже если для обоих требуетсялежащие в основе драйверов ODBC (см. # 2), RODBC - это библиотека и реализация, отличная от odbc.Кроме того, не связывайте определенные API, такие как RMySQL, с попыткой общего ODBC для SQL Server.На самом деле, неясно, почему вы используете RMySQL, когда у вас есть переменная для driver.name.Также такое значение, 'SQL Server' - это имя драйвера ODBC для Windows, а не имя macOS или Linux.См. Ниже R ODBC соединения:

    RODBC

    driver.name <- "ODBC Driver 13 for SQL Server"      # REQUIRES DOWNLOAD
    driver.name <- "ODBC Driver 17 for SQL Server"      # REQUIRES DOWNLOAD
    ...    
    con.text <- paste0("driver=", driver.name,
                      ";database=", db.name,
                      ";server=", host.name,
                      ";port=", port,
                      ";protocol=TCPIP",
                      ";UID=", user.name,
                      ";PWD=", pwd)
    
    conn <- odbcDriverConnect(con.text)
    

    odbc

    conn <- dbConnect(odbc::odbc(), driver = driver.name,
                      server = host.name, port = port, database = db.name
                      uid = user.name, pwd = pwd)
    
    # ALTERNATIVE:
    conn <- dbConnect(odbc::odbc(), .connection_string = con.text)
    
...