def execute(self, sql, args=None):
        """It is used for update, delete records.

        :param sql string: the sql stamtement like 'select * from %s'
        :param args  list: Wen set None, will use dbi execute(sql), else
            dbi execute(sql, args), the args keep the original rules, it shuld be tuple or list of list

        eg::

            execute('insert into users values(%s, %s)', [(1L, 'blablabla'), (2L, 'animer')])
            execute('delete from users')
        """
        con = self.pool.pop()
        c = None
        try:
            c = con.cursor()
            LOGGER.debug("Execute sql: " + sql + " args:" + str(args))
            if type(args) is tuple:
                c.execute(sql, args)
            elif type(args) is list:
                if len(args) > 1 and type(args[0]) in (list, tuple):
                    c.executemany(sql, args)
                else:
                    c.execute(sql, args)
            elif args is None:
                c.execute(sql)
            if sql.lstrip()[:6].upper() == 'INSERT':
                return c.lastrowid
            return c.rowcount
        except Exception as e:
            LOGGER.error("Error Execute on %s", str(e))
            raise DBError(str(e))
        finally:
            c and c.close()
            con and self.pool.push(con)
It is used for update, delete records.

        :param sql string: the sql stamtement like 'select * from %s'
        :param args  list: Wen set None, will use dbi execute(sql), else
            dbi execute(sql, args), the args keep the original rules, it shuld be tuple or list of list

        eg::

            execute('insert into users values(%s, %s)', [(1L, 'blablabla'), (2L, 'animer')])
            execute('delete from users')