Python Tibero odbc

현 시점에, Django가 티베로 odbc를 지원하지 않기때문에, 프로그래밍할때 ORM 사용은 불가능하다. 때문에, 아래와 같은 클래스를 만들어서 사용했다.

티베로 ODBC설정은 Ubuntu+Tibero+Python3+ODBC 연결하기를 참고하면 된다.

insert, delete 문은 execute 메소드를 사용하면되며, 결과값이 있는 쿼리는 query나 fetchone, fetchall 메소드를 사용하면된다. 윈도우 환경에서는 setdecoding 관련 부분이 필요 없지만, 리눅스 환경에서는 꼭 필요하다.

# Use to Tibero database from ODBC.
# if has return query then use query, else execute...

import pyodbc


class Tibero:
    def __init__(self):
        dbuser = 'tibero_user'
        dbpass = 'tibero_password'
        dsn = 'ODBC_DSN'
        self.coninfo = 'DSN=%s;UID=%s;PWD=%s' % (dsn, dbuser, dbpass)
        self._conn = pyodbc.connect(self.coninfo)

        # setdecoding not need to windows, but need to linux
        self._conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
        self._conn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
        self._conn.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-32le')
        self._conn.setencoding(encoding='utf-8')
        self._cursor = self._conn.cursor()

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.close()

    @property
    def connect(self):
        return self._conn

    @property
    def cursor(self):
        return self._cursor

    def commit(self):
        self.connect.commit()

    def close(self, commit=True):
        if commit:
            self.commit()
        self.connect.close()

    def execute(self, sql, params=None):
        self.cursor.execute(sql, params or ())

    def fetchall(self):
        return self.cursor.fetchall()

    def fetchone(self):
        return self.cursor.fetchone()

    def query(self, sql, params=None):
        self.cursor.execute(sql, params or ())
        return self.fetchall()

답글 남기기

Your email address will not be published.