def get_item2(self, tablename, key, attributes=None, alias=None,
                  consistent=False, return_capacity=None):
        """
        Fetch a single item from a table

        Parameters
        ----------
        tablename : str
            Name of the table to fetch from
        key : dict
            Primary key dict specifying the hash key and, if applicable, the
            range key of the item.
        attributes : str or list, optional
            See docs for ProjectionExpression. If list, it will be joined by
            commas.
        alias : dict, optional
            See docs for ExpressionAttributeNames
        consistent : bool, optional
            Perform a strongly consistent read of the data (default False)
        return_capacity : {NONE, INDEXES, TOTAL}, optional
            INDEXES will return the consumed capacity for indexes, TOTAL will
            return the consumed capacity for the table and the indexes.
            (default NONE)

        """
        kwargs = {
            'TableName': tablename,
            'Key': self.dynamizer.encode_keys(key),
            'ConsistentRead': consistent,
            'ReturnConsumedCapacity': self._default_capacity(return_capacity),
        }
        if attributes is not None:
            if not isinstance(attributes, six.string_types):
                attributes = ', '.join(attributes)
            kwargs['ProjectionExpression'] = attributes
        if alias:
            kwargs['ExpressionAttributeNames'] = alias
        data = self.call('get_item', **kwargs)
        return Result(self.dynamizer, data, 'Item')