docs: def execute(self, query, args=None):
          """Execute a query
  
          :param str query: Query to execute.
  
          :param args: parameters used with query. (optional)
          :type args: tuple, list or dict
  
          :return: Number of affected rows
          :rtype: int
  
          If args is a list or tuple, %s can be used as a placeholder in the query.
          If args is a dict, %(name)s can be used as a placeholder in the query.
          """
          while self.nextset():
              pass
  
          query = self.mogrify(query, args)
  
          result = self._query(query)
          self._executed = query
          return result