将R连接到MAC中的SQL Server

lpwwtiir  于 2023-06-03  发布在  Mac
关注(0)|答案(1)|浏览(255)

我想将R连接到我的MAC(El Capitan)上的SQL Server。我可以在Python中很容易地做到这一点,但在R中我做不到。
在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):未找到图像

abithluo

abithluo1#

当前设置存在几个问题:
1.常规与具体API:在Python中,您使用的是特定的SQL Server API:pymssql。与您的R尝试相比,您应该使用ODBC API:pyodbc(与RODBC比较)。请记住,有多种方法可以通过特定的API或通用的API(ODBC、OLEDB、JDBC等)从客户端应用程序连接到后端数据库或数据存储。
1.必填驱动程序:要使用任何ODBC库,无论是Python、R还是其他语言,都需要在客户端计算机上安装ODBC驱动程序。在尝试连接之前 * 下载此类驱动程序。几乎每个RDBMS或数据存储都维护(通常免费下载)Windows,Mac和Linux操作系统(包括SQL Server)的ODBC驱动程序:20132017
1.混合R库:在R中,大多数API都遵循DBI标准,包括ROracle, RJDBC, odbc, RMySQL, RPostgreSQL, RSQLite。不幸的是,RODBC并不遵循这个标准。您尝试的连接似乎是使用RMySQL::MySQL()对象尝试的DBI连接,DBI中的 even 不是ODBC连接字符串的一部分。
请注意,尽管两者都需要底层ODBC驱动程序(参见#2),但RODBC是一个与odbc不同的库和实现。此外,不要将特定的API(如RMySQL)与尝试的通用SQL Server ODBC混为一谈。事实上,当你有一个driver.name变量时,为什么要使用RMySQL还不清楚。'SQL Server'是Windows ODBC驱动程序名称,而不是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)

相关问题