2012-08-15 9 views
9

iODBC를 사용하여 Mac 개발 컴퓨터에서 Microsoft SQL Server에 연결하려고합니다. 내가 뭘하든 FreeTDS 드라이버에서 오류 메시지 Unable to connect to data source가 표시됩니다. 다양한 매뉴얼, 블로그 게시물 및 StackOverflow 질문을 참조한 후에 필자는 필자의 지혜로 끝 맺었습니다.Mac에서 iODBC를 사용하여 MS SQL Server에 연결

FreeTDS 버전 0.91이 Homebrew를 통해 설치된 Mac OS X 10.7.4를 사용하고 있습니다.

$ 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)') 

블로그 게시물 및 SO 게시물에서 제안 된 모든 방법을 시도했습니다 ... ODBC 관리자에서 DSN을 만들고 ~/.odbc.ini을 만들고 unixODBC (PyODBC에서 작동하지 않음)를 사용하려고 시도하고 키워드 args 대신 연결 문자열을 사용합니다. 또한 iODBC를 통해 추적 파일을 만들었습니다. here을 붙 였지만 오류 메시지보다 더 많은 정보를 수집 할 수 없었습니다.

(내 IT 부서는 프로덕션 서버의 IP에서만 접속 나에게 제한되어 있기 때문에 나는 내 ~/.ssh/config의 라인 LocalForward localhost:1433 production.someinstitution.edu:1433와 SSH를 통해 SQL 서버에 대한 연결을 터널링하고 있음을 언급해야한다. 그것은 GUI 클라이언트 작동 (SQuirreLSQL) 전달을 가정합니다.

+2

당신이 pyodbc 연결 문자열에 포트를 지정

그렇지 않으면 당신의 포트가 당신의 DSN 또는 드라이버 설정에 지정 될 수있다 (ODBC.INI 각각 freetds.conf)? – sunprophit

+0

나는 ** 내가 누락 된 단순한 무언가가되어야한다는 것을 알고 있었다! 너무 많은 sunprophit 주셔서 감사합니다. 추후 참조 용으로 : FreeTDS (또는 iODBC?)에는 드라이버의 '기본'포트 개념이 없습니다. – josePhoenix

+0

@sunprophit : 그냥 확인했는데 이제 완벽하게 작동합니다! 투표로 투표 할 수 있도록 답변으로 게시 할 수 있습니까? – josePhoenix

답변

3

DSN없는 연결의 경우 연결 문자열에 'port'매개 변수를 사용해야합니다.

+1

이 코드를 발견하는 데 너무 오래 걸린 이유 중 하나는 정확한 코드가 FreeBSD를 사용하는 우분투 및 unixODBC를 사용하는 서버에서 작동한다는 것입니다. 포트 번호를 생략해도 문제가 해결되지 않습니다. (만약 내가이 질문과 코멘트에 관련 키워드가 충분하면 아무도 내가했던 것처럼 시간을 낭비해야 할 것입니다!) – josePhoenix