Exemplo n.º 1
0
 def close_instance(self, connection: MySQLConnection,
                    cursor: MySQLConnection) -> None:
     if connection is not None and connection.is_connected():
         if cursor is not None:
             cursor.close()
         connection.close()
         self._logger.info(
             f"MySQL connection is closed. - PID: {os.getpid()}")
     else:
         self._logger.info(
             "Connection has been disconnect or be killed before.")
Exemplo n.º 2
0
class MySqlDB:

    def __init__(self, settings):
        self.settings = dict(**settings)
        self.connection = None

    def init_connection(self):
        if self.connection is None:
            self.connection = MySQLConnection(
                host = self.settings.get('DB_HOST', '127.0.0.1'),
                port = self.settings.get('DB_PORT', 3306),
                user = self.settings.get('DB_USER', 'root'),
                password = self.settings.get('DB_PASSWORD', ''),
                database = self.settings.get('DB_NAME', 'mysql'),
            )

    def is_connected(self):
        if self.connection is None:
            self.init_connection()
        return self.connection.is_connected()

    def reconnect(self, attempts, delay):
        if self.connection is None:
            self.init_connection()
        return self.connection.reconnect()

    def rollback(self):
        if self.connection is None:
            self.init_connection()
        self.connection.rollback()
        
    def commit(self):
        if self.connection is None:
            self.init_connection()
        self.connection.commit()

    @contextlib.contextmanager
    def cursor(self, buffered=True, rollback_on_error=True, **kwargs):
        if self.connection is None:
            self.init_connection()
        cursor = None
        try:
            kwargs = kwargs or {}
            kwargs.setdefault("dictionary", True)
            kwargs.setdefault("buffered", buffered)
            cursor = self.connection.cursor(**kwargs)
            yield cursor
        except MySqlError as error:
            if rollback_on_error:
                self.connection.rollback()
            raise error from None
        finally:
            if cursor:
                cursor.close()

    def fetchone(self, query, params=None, **kwargs):
        if self.connection is None:
            self.init_connection()
        cursor = None
        try:
            kwargs = kwargs or {"dictionary": True}
            kwargs.setdefault("buffered", True)
            cursor = self.connection.cursor(**kwargs)
            cursor.execute(query, params)
            result = cursor.fetchone()
            return result
        finally:
            if cursor:
                cursor.close()

    def fetchall(self, query, params=None, **kwargs):
        if self.connection is None:
            self.init_connection()
        cursor = None
        try:
            kwargs = kwargs or {"dictionary": True}
            kwargs.setdefault("buffered", True)
            cursor = self.connection.cursor(**kwargs)
            cursor.execute(query, params)
            result = cursor.fetchall()
            return result
        finally:
            if cursor:
                cursor.close()

    def close(self):
        if self.connection is not None:
            self.connection.close()