code: def query(self, sql_query, columns = None, parameters = None):
          
          tmp_query = self.__preparequery(sql_query, columns)
          if self.__methods[METHOD_MODULE].paramstyle in ('format', 'pyformat'):
              tmp_query = qmark_to_format(tmp_query)
          """
          if self.__methods[METHOD_MODULE].paramstyle == "qmark":
              if parameters is not None:
                  tmp_query = tmp_query % parameters
                  parameters = None
          """
  
          try:
              if parameters is None:
                  self.__dbapi2_cursor.execute(tmp_query)
              else:
                  self.__dbapi2_cursor.execute(tmp_query, parameters)
          except Exception, e:
              # try to reconnect
              self.__connection.reconnect(tmp_query, self.__log_reconnect)
              self.__dbapi2_cursor = self.__connection._get_raw_cursor()
  
              if parameters is None:
                  self.__dbapi2_cursor.execute(tmp_query)
              else:
                  self.__dbapi2_cursor.execute(tmp_query, parameters)
docs: If columns evaluates to true, sql_query must contain
          "${columns}" (only once) and this substring will be replaced
          by an SQL representation of the list of columns, correctly
          escaped for the backend.
          The resulting string is passed to the DBAPI2.0 .execute()
          method of the underlying DBAPI2.0 cursor, alongside with
          parameters.
          If ''not columns'', the sql_query string will be passed
          unchanged to the DBAPI2.0 .execute() method.