[Ubuntu12.04] pyodbc로 MS-SQL 서버 접속하기 Develop Tip

pyodbc를 윈도우에 설치하고,

$ ll
total 50424
-rw-r--r--  1 mcchae  staff   1592757  5  6  2014 get-pip.py
-rw-r--r--  1 mcchae  staff    268714  7 15  2013 pyodbc-3.0.7.win-amd64-py2.7.exe
-rw-r--r--  1 mcchae  staff       255  5 14  2014 pysnmp_install.bat
-rw-r--r--  1 mcchae  staff  16617472  5 16  2013 python-2.7.5.amd64.msi
-rw-r--r--  1 mcchae  staff   7327755 10 29  2012 pywin32-218.win-amd64-py2.7.exe

위의 패키지 참고.

 이를 이용하여 바로

    cnxn = pyodbc.connect("DRIVER={SQL Server};SERVER=10.1.2.3;DATABASE=C2S;UID=sa;PWD=1234")
    cursor = cnxn.cursor()
    r = cursor.execute("SELECT 1")
    for row in r: print row

위와 같이 코딩을 하여도 잘 나왔습니다.

그런데 이를 Ubuntu 12.04에서 테스트를 하니 아무리 해도 안되는 것이었습니다.
이를 우분투에서 하려면 원래 ODBC의 DataSource 라는 것과 연동을 시켜야 되더군요.

다음과 같은 방법으로 진행합니다.


1) 필요 패키지 설치

sudo apt-get install unixodbc unixodbc-dev freetds-dev tdsodbc freetds-bin
sudo pip install https://pyodbc.googlecode.com/files/pyodbc-3.0.7.zip


2) FreeTDS를 이용한 연결 확인

sudo vi /etc/freetds/freetds.conf
마지막에 다음의 내용을 추가

[sqlserver]
    host = 10.1.2.3
    port = 1433
    tds version = 7.0

그러면 다음과 같은 tsql 로 아래와 같이 연결이 되어야 합니다.

$ tsql -S sqlserver -U sa -P 066e
locale is "ko_KR.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> select 1
2> go
1
(1 row affected)
1> quit


3) ODBC Driver 지정

우선 다음의 명령으로

$ odbcinst -j
unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/future/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

위에서와 같이 DRIVERS와 SYSTEM DATA SOURCES가 각각
/etc/odbcinst.ini, /etc/odbc.ini 임을 알 수 있습니다.

sudo vi /etc/odbcinst.ini

비어있는 곳에 다음의 섹션을 넣었습니다

[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
# Some installations may differ in the paths
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1


4) Data Source 추가

sudo vi /etc/odbc.ini
파일을 열어 다음을 추가합니다.
[sqlserverdatasource]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = sqlserver
# sqlserver라는 이름은 /etc/freetds/freetds.conf 에 지정한 섹션 이름


5) 파이썬 실행파일

    dsn = 'sqlserverdatasource'
    user = 'sa'
    password = '1234'
    database = 'C2S'
    con_string = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (dsn, user, password, database)
    cnxn = pyodbc.connect(con_string)
    cursor = cnxn.cursor()
    r = cursor.execute("SELECT 1")
    for row in r: print row


그러면 결과가
(1, )

라고 잘 나옵니다.


어느분께는 도움이 되셨기를...

덧글

댓글 입력 영역

구글애드텍스트