19
setwd("/mnt/mountpoint/abc/")
sqlServerConnString <- "SERVER=server;DATABASE=sqldwdb;UID=xyz;PWD=abc;"
sqlServerDataDS <- RxSqlServerData(sqlQuery = "SELECT * FROM xyz",
                               connectionString = sqlServerConnString)
sqlServerDataDF <- rxImport(sqlServerDataDS)

这是我的代码。我在 R 中收到以下错误

[unixODBC][驱动程序管理器]无法打开库“SQL Server”:找不到文件

[unixODBC][驱动程序管理器]连接不存在 SQLDisconnect 中的 ODBC 错误无法打开数据源。doTryCatch(return(expr), name, parentenv, handler) 中的错误:无法打开数据源。

我已经在我的 linux 机器上安装了 MSSQL 和 unixODBC 驱动程序,它也在 /etc/odbc.ini 文件中得到反映

有人可以帮我吗?

4

2 回答 2

33

当我把下面的代码连接到 MSSQLSERVER 时,我得到了同样的错误

library(RODBC)
dbconnection <- odbcDriverConnect("Driver=SQL Server;Server=192.168.76.60; Database=kaggle;Uid=sa; Pwd=1234")

它向我抛出

[unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found

为什么抛出这个错误? 答:当我们未能在驱动程序值上放置正确的 ODBC 版本名称时。

从哪里我们可以得到驱动程序 ODBC 版本名称

在“/etc”文件夹中你会发现“odbcinst.ini”文件打开它并检查版本名称

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
UsageCount=1

所以我从这里得到了 ODBC 驱动程序名称,它将是“ODBC Driver 17 for SQL Server”然后我修改我的连接字符串

library(RODBC)
dbconnection <- odbcDriverConnect("Driver=ODBC Driver 17 for SQL Server;Server=192.168.76.60; Database=kaggle;Uid=sa; Pwd=1234")

它工作正常

于 2018-07-10T13:22:50.483 回答
2

不幸的是,就我而言,Zaynul 的回答没有奏效。但它帮助我找到了另一种方式。我正在使用 sqlalchemy,我可以成功地创建一个传递驱动程序路径的连接:

engine = create_engine('mssql+pyodbc://sa:******@localhost:1433/dbCVServer?driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1', echo=True)

engine.execute('select 1')

编辑:我对那个解决方案不满意,因为驱动程序的文件名可能会改变,所以我设法改变了用于连接的库做 pymssql。

engine = create_engine('mssql+pymssql://sa:******@localhost:1433/dbCVServer')

它也运作良好。=]

编辑 2:例如,对于那些使用 sql express 的人来说,另一个发现,连接到一个命名实例。

engine = create_engine('mssql+pymssql://mssql+pymssql://localhost\SQLEXPRESS/dbCVServer')

于 2019-01-21T10:59:29.653 回答