Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DB(object):
- def __init__(self, *, db_user=None, db_password=None, db_identifier=None, db_schema=None):
- self.db_user = db_user
- if not self.db_user: self.db_user = config.db_user
- self.db_password = db_password
- if not self.db_password: self.db_password = config.db_password
- self.db_identifier = db_identifier
- if not self.db_identifier: self.db_identifier = config.db_identifier
- self.db_schema = db_schema
- if not self.db_schema: self.db_schema = config.db_schema
- self.db = None
- def connect(self):
- if self.db: return
- os.environ["NLS_LANG"] = "Russian.AL32UTF8"
- self.db = cx_Oracle.connect(self.db_user+'/'+self.db_password+'@'+self.db_identifier)
- # for CLOB we need some magic
- # https://cx-oracle.readthedocs.io/en/latest/user_guide/lob_data.html
- def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):
- if defaultType == cx_Oracle.DB_TYPE_CLOB:
- return cursor.var(cx_Oracle.DB_TYPE_LONG, arraysize=cursor.arraysize)
- if defaultType == cx_Oracle.DB_TYPE_BLOB:
- return cursor.var(cx_Oracle.DB_TYPE_LONG_RAW, arraysize=cursor.arraysize)
- self.db.outputtypehandler = OutputTypeHandler
- self.cc = self.db.cursor()
- self.execute("alter session set nls_date_format='dd.mm.yyyy hh24:mi:ss'")
- if self.db_schema: self.execute("alter session set current_schema=%s" % self.db_schema)
- def _execute(self, query, params):
- if params:
- self.cc.execute(query, params)
- else:
- self.cc.execute(query)
- return self.cc
- def execute(self, query, params=None):
- self.connect()
- try:
- self._execute(query, params)
- except (cx_Oracle.OperationalError, cx_Oracle.DatabaseError, cx_Oracle.InterfaceError):
- self.db = None
- self.connect()
- self._execute(query, params)
- return self.cc
- def commit(self):
- if self.db:
- self.db.commit()
- def disconnect(self):
- if self.db:
- self.db.disconnect()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement