Advertisement
Guest User

Untitled

a guest
May 3rd, 2022
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.97 KB | None | 0 0
  1. class DB(object):
  2.   def __init__(self, *, db_user=None, db_password=None, db_identifier=None, db_schema=None):
  3.     self.db_user = db_user
  4.     if not self.db_user: self.db_user = config.db_user
  5.     self.db_password = db_password
  6.     if not self.db_password: self.db_password = config.db_password
  7.     self.db_identifier = db_identifier
  8.     if not self.db_identifier: self.db_identifier = config.db_identifier
  9.     self.db_schema = db_schema
  10.     if not self.db_schema: self.db_schema = config.db_schema
  11.     self.db = None
  12.  
  13.   def connect(self):
  14.     if self.db: return
  15.     os.environ["NLS_LANG"] = "Russian.AL32UTF8"
  16.     self.db = cx_Oracle.connect(self.db_user+'/'+self.db_password+'@'+self.db_identifier)
  17.  
  18.     # for CLOB we need some magic
  19.     # https://cx-oracle.readthedocs.io/en/latest/user_guide/lob_data.html
  20.     def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):
  21.       if defaultType == cx_Oracle.DB_TYPE_CLOB:
  22.         return cursor.var(cx_Oracle.DB_TYPE_LONG, arraysize=cursor.arraysize)
  23.       if defaultType == cx_Oracle.DB_TYPE_BLOB:
  24.         return cursor.var(cx_Oracle.DB_TYPE_LONG_RAW, arraysize=cursor.arraysize)
  25.     self.db.outputtypehandler = OutputTypeHandler
  26.  
  27.     self.cc = self.db.cursor()
  28.  
  29.     self.execute("alter session set nls_date_format='dd.mm.yyyy hh24:mi:ss'")
  30.     if self.db_schema: self.execute("alter session set current_schema=%s" % self.db_schema)
  31.  
  32.   def _execute(self, query, params):
  33.     if params:
  34.       self.cc.execute(query, params)
  35.     else:
  36.       self.cc.execute(query)
  37.     return self.cc
  38.  
  39.   def execute(self, query, params=None):
  40.     self.connect()
  41.     try:
  42.       self._execute(query, params)
  43.     except (cx_Oracle.OperationalError, cx_Oracle.DatabaseError, cx_Oracle.InterfaceError):
  44.       self.db = None
  45.       self.connect()
  46.       self._execute(query, params)
  47.     return self.cc
  48.  
  49.   def commit(self):
  50.     if self.db:
  51.       self.db.commit()
  52.  
  53.   def disconnect(self):
  54.     if self.db:
  55.       self.db.disconnect()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement