我想将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] [驱动程序管理器] dlopen(SQL Server,6):找不到图像
答案 0 :(得分:0)
当前设置存在几个问题:
常规API与特定API :在Python中,您使用的是特定SQL Server API:pymssql
。为了与R尝试进行公平比较,您应该使用ODBC API:pyodbc
(与RODBC
比较)。请记住,有多种方法可以通过特定的API或通用的API(ODBC,OLEDB,JDBC等)从客户端应用程序连接到后端数据库或数据存储。
必需的驱动程序:要使用任何ODBC库(无论是Python,R还是其他语言),您都需要在客户端计算机上安装一个ODBC驱动程序。在尝试连接前 下载此类驱动程序。几乎每个RDBMS或数据存储都维护(通常免费下载)适用于Windows,Mac和Linux操作系统(包括SQL Server:2013或2017)的ODBC驱动程序。
混合R库:在R中,大多数API都遵循DBI标准,包括ROracle, RJDBC, odbc, RMySQL, RPostgreSQL, RSQLite
。不幸的是,RODBC
没有遵循该标准。您尝试的连接似乎是使用DBI
对象的尝试的RMySQL::MySQL()
连接,而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)