使用替代的unixODBC安装
我正在一个环境中工作,这里安装了unixODBC,并且这个软件是在一个组织范围内的中央共享驱动器上,但我们(真正的开发者)不能在里面安装驱动程序或数据源。这一切都很混乱,但我必须接受这个现实。
现在我正在尝试构建一个Python应用程序,目的是从这个Unix环境连接到一个mssql 2005服务器,所以我显然需要一些SQL驱动程序!
为了绕过我无法访问预装的unixODBC的问题,我在我完全控制的驱动器的一部分上重新安装了unixODBC。我安装了freeTDS,并配置了一切,这样我就可以成功地通过isql连接到服务器——太好了!
现在唯一的问题是,当我在我的Python程序中执行一行代码(使用pyodbc)时,比如:
import pyodbc
pyodbc.connect("DSN=<dsn_name>;UID=...;PWD=...", autocommit=True)
我得到了
('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnectW)')
我猜这是因为pyodbc仍然在寻找原始的unixODBC安装,而不是我本地的那个。所以我在想:
我该如何配置我的脚本,让它们去寻找我本地的unixODBC安装,而不是主驱动器上安装的那个呢?
3 个回答
0
这个问题可能是因为它在查找全局的 ini 文件。你可以通过设置 ODBCSYSINI=/path/to/location/of/inifiles
来指定它查找 odbc.ini
和 odbcinst.ini
文件的位置。
2
感谢上面的回答,这让我开始修改setup.py文件中的get_compiler_settings,让它不要使用默认的iodbc。
对我来说有效的方法是(我用的是OS X 10.9,pyodbc版本是3.0.7):
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
#settings['libraries'].append('iodbc')
# but I don't want to use iodbc, I want to use brewed unixodbc
settings['libraries'].append('odbc')
6
在自定义环境中安装pyodbc会有点麻烦。你需要修改一个叫做 setup.py
的脚本,让它去你指定的位置寻找unixODBC。你可以在 get_compiler_settings
函数里加上类似下面的内容:
settings['include_dirs'] = ['/opt/local/include']
settings['library_dirs'] = ['/opt/local/lib']
这样做可以帮助安装过程找到正确的文件。