현 시점에, 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()