Advertisement
Guest User

Untitled

a guest
Oct 14th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.55 KB | None | 0 0
  1. class DBStorageService(StorageService):
  2.     __version__ = 1
  3.  
  4.     __dbname = None
  5.     __dbuser = None
  6.     __dbpwd = None
  7.  
  8.     __connection = None
  9.     __cursor = None
  10.  
  11.     def __init__(self, dbname: str, dbuser: str, dbpwd: str) -> None:
  12.         logging.info('Register extensions')
  13.         psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
  14.         psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
  15.         logging.info('Create DBStorage object with params: dbname=' + dbname + ', dbuser=' + dbuser)
  16.         self.__dbname = dbname
  17.         self.__dbuser = dbuser
  18.         self.__dbpwd = dbpwd
  19.         super().__init__()
  20.         psycopg2.extras.register_uuid()
  21.         self.__connection = psycopg2.connect(database=self.__dbname, user=self.__dbuser, password=self.__dbpwd, host='127.0.0.1')
  22.  
  23.     def create(self, sql: str, data: tuple, is_return_id: bool = False) -> None:
  24.         logging.debug('Create database object.')
  25.         id = self.__execute_sql(sql=sql, data=data, is_return_id=is_return_id)
  26.         self.commit()
  27.         return id
  28.  
  29.     def get(self, sql: str, data: tuple = None) -> dict:
  30.         logging.debug('Get database object.')
  31.         self.__execute_sql(sql=sql, data=data)
  32.         logging.debug("Do Fetch All")
  33.         data = self.__cursor.fetchall()
  34.         self.commit()
  35.         logging.debug("Fetch size rows: " + str(len(data)))
  36.         return data
  37.  
  38.     def update(self, sql: str, data: tuple) -> None:
  39.         logging.debug('Update database object.')
  40.         self.__execute_sql(sql=sql, data=data)
  41.         self.commit()
  42.  
  43.     def delete(self, sql: str, data: tuple) -> None:
  44.         logging.debug('Update database object.')
  45.         self.__execute_sql(sql=sql, data=data)
  46.         self.commit()
  47.  
  48.     def __execute_sql(self, sql: str, data: tuple = None, is_return_id: bool = False) -> Optional[str]:
  49.         logging.debug("__ExecuteSQL method called")
  50.         sql = sql.replace("?", "%s")
  51.         log_txt = "\nSQL: %s\nParameters: %s " % (sql, data)
  52.         logging.debug(log_txt)
  53.         logging.debug("Create cursor")
  54.         try:
  55.             self.__cursor = self.__connection.cursor(cursor_factory=psycopg2.extras.DictCursor)
  56.         except InterfaceError as e:
  57.             logging.error(e)
  58.             self.__connection = psycopg2.connect(database=self.__dbname, user=self.__dbuser, password=self.__dbpwd)
  59.             self.__cursor = self.__connection.cursor(cursor_factory=psycopg2.extras.DictCursor)
  60.         try:
  61.             logging.debug("Execute SQL")
  62.             self.__cursor.execute(sql, data)
  63.             if is_return_id:
  64.                 return self.__cursor.fetchone()[0]
  65.         except DatabaseError as err:
  66.             logging.error("Database Error happened. Code: %s . Message: %s" % (err.pgcode, err.pgerror))
  67.             logging.error(err)
  68.             self.rollback()
  69.             raise DatabaseError(err)
  70.  
  71.     def commit(self):
  72.         logging.debug("Commit method called")
  73.         logging.debug("Close Cursor")
  74.         self.__cursor.close()
  75.         logging.debug("Commit Connection")
  76.         self.__connection.commit()
  77.  
  78.     def rollback(self):
  79.         logging.debug("Rollback method called")
  80.         logging.debug("Do connection rollback")
  81.         self.__connection.rollback()
  82.  
  83.     def __del__(self):
  84.         logging.info("__del__ method")
  85.         if self.__cursor is not None:
  86.             logging.debug("Cursor Close")
  87.             self.__cursor.close()
  88.         if self.__connection is not None:
  89.             logging.debug("Connection Close")
  90.             self.__connection.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement