使用pyODBC-> unixODBC-> FreeTDS-> MS SQL堆栈尝试在python中连接到MS SQL Server时出现错误。我已经花了很多时间,如果您遇到这个问题,但遇到一些更基本的问题,就无法在这里和这里工作,那么这里有很多宝贵的资源。
但是,我的问题是(我认为)非常接近这种令人沮丧的体验的终点的错误。具体来说,以下代码在jupyter笔记本中:
pyodbc.connect(
'DRIVER=/usr/local/lib/libtdsodbc.so;'
'SERVER=MyServerIP;'
'PORT=1433;'
'DATABASE= DatabaseName;'
'UID=MyUsername;'
'PWD=MyPassword')
给我这个错误:
---------------------------------------------------------------------------
Error Traceback (most recent call last)
<ipython-input-7-d6b29b647116> in <module>()
1 pyodbc.connect(
----> 2 'DRIVER = /usr/local/lib/libtdsodbc.so;'
3 'SERVER = MyServerIP;'
4 'PORT = 1433;'
5 'DATABASE = DatabaseName'
Error: ('HY000', '[] (20013) (SQLDriverConnect)’)
如果我替换为'DRIVER = / usr / local / lib / libtdsodbc.so;' 使用“ DRIVER = FreeTDS;” 我得到:
---------------------------------------------------------------------------
Error Traceback (most recent call last)
<ipython-input-12-607f0d66e615> in <module>()
1 pyodbc.connect(
----> 2 'DRIVER=FreeTDS;'
3 'SERVER= MyServerIP;'
4 'PORT=1433;'
5 'DATABASE= DatabaseName;'
Error: ('00000', '[00000] [iODBC][Driver Manager]dlopen(FreeTDS, 6): image not found (0) (SQLDriverConnect)')
这使我相信unixODBC-> FreeTDS连接有问题,因为引用了iODBC。换句话说,除非我专门提供FreeTDS驱动程序的路径,否则它似乎会忽略我的odbcinst.ini和odbc.ini文件,它们将FreeTDS及其位置引用为我的驱动程序(请参见下文)。
从终端运行tsql和isql时,两者都与服务器建立了良好的连接。
但是,当我运行osql时,出现以下错误:
$ osql -S MyServerIP -U MyUsername -P MyPassword
checking shared odbc libraries linked to isql for default directories...
/usr/local/bin/osql: line 53: ldd: command not found
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strings: can't open file: (No such file or directory)
osql: problem: no potential directory strings in "/usr/local/bin/isql"
osql: advice: use "osql -I DIR" where DIR unixODBC\'s install prefix e.g. /usr/local
isql strings are:
checking odbc.ini files
reading /Users/myname/.odbc.ini
[MyServerIP] not found in /Users/myname/.odbc.ini
cannot read "/odbc.ini"
osql: error: unable to locate MyServerIP in any odbc.ini
我的设置背景
我的连接是使用第一段中链接的两个资源构建(以及重建和重建)的,我的完整设置如下所示:
环境
Mac OSX 10.11.5
Microsoft SQL Server 2012 – AWS EC2实例(云)
水蟒4.0
的Python 3.5.1
Jupyter笔记本电脑4.1.0
连接堆栈
unixODBC –使用自制软件安装
FreeTDS –使用homebrew通过以下命令安装:`$ brew install
freetds --with-unixodbc`
pyODBC 3.0.10 –使用conda install安装
MS SQL – AWS EC2实例(云)
参考文件
我的freetds.conf文件内容如下:
[MYSERVERNAME]
host = MyServerIP
port = 1433
tds version = 7.3
client charset = UTF-8
我的odbcinst.ini文件的内容如下:
[FreeTDS]
Description = TD Driver (MSSQL)
Driver = /usr/local/lib/libtdsodbc.so
Setup = /usr/local/lib/libtdsodbc.so
FileUsage = 1
我的odbc.ini文件的内容如下:
[MYSERVERNAME]
Driver = FreeTDS
Server = MyServerIP
Port = 1433
我完全不知所措,花了比我应该花的时间还要多得多的时间。如果有人有任何建议,我将永远感激不已。
谢谢。
好吧,我们已经解决了它-在本页和此处的许多人的帮助下,追逐了许多盲目的小巷。
正如(最终)怀疑的那样,它是连接中的pyodbc链接。我是从Anaconda软件包存储库下载的,使用的是pyodbc v3.0.10。解决方案是v.3.0.9。一旦我卸载了v3.0.10,从pypi存储库下载了v3.0.9,然后构建并安装了自己的conda程序包,就可以了。
我采取的步骤如下(请注意,这些步骤特定于anaconda环境):
conda uninstall pyodbc
conda skeleton pypi pyodbc --version 3.0.9
conda build pyodbc
conda install pyodbc=3.0.9 --use-local
一旦我回到Jupyter笔记本并运行上面的相同代码,它就建立了良好的连接。
我不知道v.3.0.10有什么问题,或者仅是anaconda.org在其存储库中具有的文件。我也在pyodbc github页面上发布了一些内容,但是它看起来并不那么活跃。
无论如何,谢谢大家的帮助。我希望这可以节省一些时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句