首页 文章

't open lib '用于SQL Server的ODBC驱动程序13? Sym链接问题?

提问于
浏览
19

当我尝试使用pyodbc(在mac上)连接到sql server数据库时:

import pyodbc

server = '####'
database = '####'
username = '####@####'
password = '#####'
driver='{ODBC Driver 13 for SQL Server}'

pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+password)

我收到以下错误:

错误:('01000',“[01000] [unixODBC] [驱动程序管理器]无法打开lib'用于SQL Server的ODBC驱动程序13':找不到文件(0)(SQLDriverConnect)”)

当我在实际的驱动程序位置路径时:

driver='/usr/local/lib/libmsodbcsql.13.dylib'

它开始工作了!

我的 odbcinst.ini 看起来像这样:

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.13.dylib
UsageCount=1

如何让我对 driver='{ODBC Driver 13 for SQL Server}' 的引用再次开始工作?

我最初使用this guide来安装驱动程序 . 如果有帮助的话,我在Mac Sierra上使用anaconda?

4 回答

  • 0

    运行:

    odbcinst -j
    

    它产生了:

    unixODBC 2.3.4
    DRIVERS............: /etc/odbcinst.ini
    SYSTEM DATA SOURCES: /etc/odbc.ini
    FILE DATA SOURCES..: /etc/ODBCDataSources
    USER DATA SOURCES..: /Users/emehex/.odbc.ini
    SQLULEN Size.......: 8
    SQLLEN Size........: 8
    SQLSETPOSIROW Size.: 8
    

    而不是将文件复制到 /etc/ 目录(不确定为什么unixODBC认为他们在那里)我创建了一个指向每个文件的符号链接:

    sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
    sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini
    

    这解决了这个问题 .

  • 30

    在我的情况下,我必须将 pyodbc 数据库驱动程序字符串更改为
    driver='{ODBC Driver 17 for SQL Server}'

    实际上,在我的python代码中,pyodbc期待 ODBC Driver 13
    但是,当ODBC驱动程序版本更新(因为ubuntu更新)到当前版本 ODBC Driver 17 时,问题就出现了 .

  • 12

    在我的情况下,我有一个Mac OS和folling命令解决了这个问题:

    brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
    brew update
    brew install --no-sandbox msodbcsql mssql-tools
    
  • 3

    我必须补充一点,如果你使用的是另一个驱动程序(FreeTDS),并且在你的连接字符串中你省略提及它,它将默认为 driver='{ODBC Driver 17 for SQL Server} 或类似的东西 .

    所以解决方案是不要忘记驱动程序,你的数据库设置将如下所示: 'default': { 'ENGINE': 'sql_server.pyodbc', 'HOST': '127.0.0.1', 'NAME': 'mydb', 'PORT': '1433', 'USER': 'sa', 'PASSWORD': '*****', 'OPTIONS':{ 'driver': 'FreeTDS', 'host_is_server': True, } }

相关问题