일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Git
- 더현대서울 맛집
- Baekjoon
- Kaggle
- 백준
- PYTHON
- 프로그래머스
- 편스토랑 우승상품
- 파이썬
- 데이콘
- SW Expert Academy
- 금융문자분석경진대회
- ChatGPT
- dacon
- 프로그래머스 파이썬
- 우분투
- 자연어처리
- hackerrank
- AI 경진대회
- 코로나19
- leetcode
- 편스토랑
- programmers
- github
- 캐치카페
- Real or Not? NLP with Disaster Tweets
- ubuntu
- gs25
- 맥북
- Docker
- Today
- Total
솜씨좋은장씨
[Python] Ubuntu에서 ODBC를 활용하여 Python으로 Tibero6를 연결하는 방법! 본문
[Python] Ubuntu에서 ODBC를 활용하여 Python으로 Tibero6를 연결하는 방법!
솜씨좋은장씨 2022. 4. 10. 09:37
최근 출장 간 Python을 활용하여 DB를 연동할 일이 있었습니다.
그동안 Oracle, Postgresql, maria DB는 sqlalchemy를 활용하여 잘 연동하여 사용했었는데
이번에 연동해야할 DB는 티맥스 소프트에서 만든 Tibero라는 데이터 베이스였습니다.
Tibero는 기존에 다른 DB를 연동할 때 처럼 sqlalchemy를 활용하여 연동하는 것이 불가했습니다.
찾아보니 Tibero 는 ODBC라는 것을 활용하여 연동이 가능했습니다.
이번 글에서는 Ubuntu 환경에서 ODBC를 활용하여 Tibero ( 버전 Tibero6 ) 를 연결하는 방법에 대해 적어보고자 합니다.
👨🏻💻 연동을 위해 필요한 정보
먼저 연동을 위해서는 몇가지 정보가 필요합니다.
구분 | 예시 | 비고 |
데이터 베이스 IP 주소 | 10.20.30.40 | 같은 서버인 경우 0.0.0.0 |
데이터 베이스의 포트 번호 | 8629 | 기본 포트는 8629 ( 서버 설정에 따라 다를 수 있음 ) |
데이터 베이스의 UID | SOMJANG | |
데이터 베이스의 DSN | SOMJANGDB | |
데이터 베이스의 비밀번호 | somjang1234 |
먼저 위의 값들을 확인하여 정리해둡니다.
DB_IP = 10.20.30.40 # 데이터 베이스 IP 주소
DB_PORT = 8629 # 데이터 베이스의 포트 번호
DB_UID = SOMJANG # 데이터 베이스의 UID
DB_DSN = SOMJANGDB # 데이터 베이스의 DSN
DB_USER = SOMJANG_USER # 데이터 베이스의 유저
DB_PASSWORD = somjang1234 # 데이터 베이스의 비밀번호
Tibero Driver 주소 = /home/tibero/client/libtbodbc.so
👨🏻💻 unixodbc 설치
그 다음 unixodbc 설치를 진행합니다.
$ sudo apt-get install gcc
$ sudo apt-get update
$ sudo apt-get install -y tdsodbc unixodbc-dev
$ sudo apt install unixodbc-bin -y
👨🏻💻 odbc.ini 작성
# cat /etc/odbc.ini
[ODBC]
Trace = 1
TraceFile = /tmp/odbc.trace
[Tibero6]
Trace = no
#Driver = Tibero6
Driver = /home/tibero/client/libtbodbc.so
Description = Tibero6 ODBC Datasource
# ConnectionType = Direct
SERVER = 10.20.30.40
PORT = 8629
# AuthenticationType=No Authentication
SID = SOMJANG
User = SOMJANG_USER
Password = somjang1234
Database = SOMJANGDB
👨🏻💻 odbcinst.ini 작성
[Tibero6]
Description = Tibero6 ODBC driver
Driver = /home/tibero/client/libtbodbc.so
Setup = /home/tibero/client/libtbodbc.so
Setup = 1
FileUsage = 1
👨🏻💻 pyodbc 설치
$ pip install pyodbc
👨🏻💻 Tibero Driver 다운로드 - libtbodbc.so
제가 맨 처음에 가장 삽질을 많이하던 부분이 바로 이 부분입니다.
만약 Tibero 가 설치된 서버와 다른 서버에서 연동을 하는 것 이라면 Tibero Driver 를 따로 다운로드 받아야 합니다.
다운로드에는 TechNet 홈페이지 계정으로 로그인이 필요하기 때문에
계정이 없으신 분은 먼저 회원가입을 진행하신 다음에 진행하시는 것을 추천드립니다.
먼저 위의 페이지로 이동합니다.
여기서 Tibero6 부분의 다운로드를 클릭합니다.
TechNet 계정으로 로그인을 진행합니다.
Download 버튼을 클릭합니다.
버튼을 클릭하면 맨 아래쪽으로 내려가는데 여기서
Linux > 내 Linux 버전 선택 > 첨부파일 다운로드 순으로 진행합니다.
여기서 우리가 필요한 파일은 다운로드 받은 tar.gz의 압축을 해제한 다음 그 안에있는 libtbodbc.so 파일 입니다.
압축 해제한 파일 중에 해당 파일의 위치는
tibero6 > client > lib > libtbodbc.so 위치에 있습니다.
이제 이 파일을 어쩌냐! 하면
위에 odbc.ini와 odbcinst.ini에 적었던 Driver의 경로에 옮겨두면 됩니다.
현재 이 과정의 경우 /home/tibero/client/libtbodbc.so 위치에 가져다 두면 됩니다.
👨🏻💻 Python 연동 코드 작성
DSN = os.environ.get("DSN", DB_DSN)
UID = os.environ.get("UID", DB_UID)
PWD = os.environ.get("PWD", DB_PASSWORD)
CONNECT_STRING = f"DSN={DSN};UID={UID};PWD={PWD}"
먼저 미리 정리해둔 값으로 위처럼 CONNECT_STRING을 만들어 줍니다.
import pyodbc
conn = pyodbc.connect(CONNECT_STRING)
conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-16')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-16')
conn.setencoding(encoding='utf-8')
pyodbc를 import 하고 conn 을 하나 만들어 줍니다.
이때 encoding 설정을 맞춰주지 않으면 PSM Compilation Error 를 .... 계속 만나게 될겁니다...ㅠㅠ
( 모르고 이틀이나 삽질한... 슬픈... 에러... )
자세한 내용은 아래 링크를 참고해주세요.
이제 생성한 conn으로 cursor를 생서하고 거기에 준비한 SQL문을 넣고 실행하면 됩니다.
data_select_query = """SELECT * FROM DUAL"""
cursor = conn.cursor()
cursor = cursor.execute(data_select_query)
사용을 다 했다면
cursor.close()
conn.close()
모두 close 시켜주면 됩니다.
읽어주셔서 감사합니다.