code: def _GetAttributeContainerByIndex(self, container_type, index):
      
      sequence_number = index + 1
      query = 'SELECT _data FROM {0:s} WHERE rowid = {1:d}'.format(
          container_type, sequence_number)
  
      try:
        self._cursor.execute(query)
      except sqlite3.OperationalError as exception:
        raise IOError('Unable to query storage file with error: {0!s}'.format(
            exception))
  
      row = self._cursor.fetchone()
      if row:
        identifier = identifiers.SQLTableIdentifier(
            container_type, sequence_number)
  
        if self.compression_format == definitions.COMPRESSION_FORMAT_ZLIB:
          serialized_data = zlib.decompress(row[0])
        else:
          serialized_data = row[0]
  
        if self._storage_profiler:
          self._storage_profiler.Sample(
              'read', container_type, len(serialized_data), len(row[0]))
  
        attribute_container = self._DeserializeAttributeContainer(
            container_type, serialized_data)
        attribute_container.SetIdentifier(identifier)
        return attribute_container
  
      count = self._CountStoredAttributeContainers(container_type)
      index -= count
  
      serialized_data = self._GetSerializedAttributeContainerByIndex(
          container_type, index)
      attribute_container = self._DeserializeAttributeContainer(
          container_type, serialized_data)
  
      if attribute_container:
        identifier = identifiers.SQLTableIdentifier(
            container_type, sequence_number)
        attribute_container.SetIdentifier(identifier)
      return attribute_container
docs: Retrieves a specific attribute container.
  
      Args:
        container_type (str): attribute container type.
        index (int): attribute container index.
  
      Returns:
        AttributeContainer: attribute container or None if not available.
  
      Raises:
        IOError: when there is an error querying the storage file.
        OSError: when there is an error querying the storage file.