Sql server 使用Mac上的iODBC连接到MS SQL Server

Sql server 使用Mac上的iODBC连接到MS SQL Server,sql-server,macos,pyodbc,freetds,iodbc,Sql Server,Macos,Pyodbc,Freetds,Iodbc,我正在尝试使用iODBC从我的Mac开发机器连接到Microsoft SQL Server。无论我做什么,我都会从FreeTDS驱动程序收到错误消息无法连接到数据源。在查阅了各种手册、博客帖子和问题之后,我已经不知所措了 我使用的是Mac OS X 10.7.4,FreeTDS版本0.91通过自制软件安装。以下是我正在做的: $ brew install freetds $ mkvirtualenv odbc $ workon odbc $ pip install pyodbc $ tsql

我正在尝试使用iODBC从我的Mac开发机器连接到Microsoft SQL Server。无论我做什么,我都会从FreeTDS驱动程序收到错误消息
无法连接到数据源
。在查阅了各种手册、博客帖子和问题之后,我已经不知所措了

我使用的是Mac OS X 10.7.4,FreeTDS版本0.91通过自制软件安装。以下是我正在做的:

$ brew install freetds
$ mkvirtualenv odbc
$ workon odbc
$ pip install pyodbc

$ tsql -H localhost -U mydbusername -P mydbpassword -p 1433 
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> quit
上述方法可以连接并工作,但:

$ iodbctest
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0607.1008

Enter ODBC connect string (? shows list): driver={TDS};server=localhost;uid=mydbusername;pwd=mydbpassword;database=mydbname
1: SQLDriverConnect = [FreeTDS][SQL Server]Unable to connect to data source (0) SQLSTATE=08001
1: ODBC_Connect = [FreeTDS][SQL Server]Unable to connect to data source (0) SQLSTATE=08001
因为我最终计划通过PyODBC使用它,所以我也尝试过:

$ python
Python 2.7.3 (default, Jun 22 2012, 00:35:38) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyodbc
>>> c = pyodbc.connect(driver='/usr/local/lib/libtdsodbc.so', host='localhost', name='mydbname', uid='mydbusername', pwd='mydbpassword')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('08001', '[08001] [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')
$python
Python 2.7.3(默认值,2012年6月22日00:35:38)
[GCC 4.2.1(基于苹果公司5658版本)(LLVM版本2335.15.00)]关于达尔文
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入pyodbc
>>>c=pyodbc.connect(driver='/usr/local/lib/libtdsodbc.so',host='localhost',name='mydbname',uid='mydbusername',pwd='mydbpassword')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
pyodbc.Error:('08001','[08001][FreeTDS][SQL Server]无法连接到数据源(0)(SQLDriverConnect)'
我已经尝试了在博客帖子中建议的所有方式,所以帖子。。。在ODBC Administrator中创建DSN,创建
~/.ODBC.ini
,尝试使用unixODBC(它不适用于PyODBC),指定连接字符串而不是关键字args,等等。我还通过iODBC生成了一个跟踪文件,我已粘贴了该文件,但我无法从中收集到比从错误消息中更多的信息


(我应该提到,在我的
~/.SSH/config
中,我使用行
LocalForward localhost:1433 production.someinstitution.edu:1433
通过SSH隧道连接到SQL Server,因为我的IT部门限制我只能从生产服务器的IP连接。它适用于GUI客户端(SQL)因此,我假设转发是正确的。)

如果是无DSN连接,则应在连接字符串中使用“port”参数


否则,您的端口可以在DSN或驱动程序配置(分别为odbc.ini和freetds.conf)中指定。

您在pyodbc连接字符串中指定了端口吗?我知道它一定是我缺少的简单的东西!非常感谢sunprophit。注意以备将来参考:FreeTDS(或iODBC?)没有驱动程序的“默认”端口概念。@sunprophit:刚刚检查过,现在工作正常!你能把它作为一个答案贴出来让我投票赞成/接受吗?你做了什么让iODBC找到了司机?通过自制软件安装FreeTDS后,是否需要编辑配置文件?之所以花了这么长时间才找到,部分原因是我的Ubuntu服务器和unixODBC FreeTDS服务器上的代码完全相同。在那里,我可以省略端口号,事情仍然可以继续。(希望如果我在这个问题和评论中有足够的相关关键词,没有人会像我一样浪费时间!)