docs: def execute(self, query_string, params=None):
      """Executes a query. Returns the resulting cursor.
  
      :query_string: the parameterized query string
      :params: can be either a tuple or a dictionary, and must match the parameterization style of the
               query
      :return: a cursor object
      """
      cr = self.connection.cursor()
      logger.info("SQL: %s (%s)", query_string, params)
      self.last_query = (query_string, params)
      t0 = time.time()
      cr.execute(query_string, params or self.core.empty_params)
      ms = (time.time() - t0) * 1000
      logger.info("RUNTIME: %.2f ms", ms)
      self._update_cursor_stats(cr)
      return cr