How to use "range_key_condition" to query a DynamoDB table with boto?
Question: To get range_key between (0,9999), can I do it this way?

    
    
    conn = boto.connect_dynamodb()
    table = conn.get_table("mytable")
    ...
    result = table.query(
          hash_key = "66", 
          range_key_condition = {"0":"GE", "9999":"LE"}
          )
    

# with boto v2.2.2-dev, I always get empty results

EDIT: This is a another error sample:

    
    
    In [218]: qa = taa.query(hash_key = "1")
    
    In [219]: qa.next()
    Out[219]: {u'attra': u'this is attra', u'key': u'1', u'range': 1.1}
    

## It's OK without "range_key_condition" above

    
    
    In [220]: qa = taa.query(hash_key = "1", range_key_condition = {0.1: "GE"})
    
    In [221]: qa.next()
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    /home/user/python/enva/<ipython-input-221-dba0a498b6e1> in <module>()
    ----> 1 qa.next()
    
    /home/user/python/enva/local/lib/python2.7/site-packages/boto-2.2.2_dev-py2.7.egg/boto/dynamodb/layer2.pyc
    in query(self, table, hash_key, range_key_condition,
    attributes_to_get, request_limit, max_results, consistent_read,
    scan_index_forward, exclusive_start_key, item_class)
        559         """
        560         if range_key_condition:
    --> 561             rkc = self.dynamize_range_key_condition(range_key_condition)
        562         else:
        563             rkc = None
    
    /home/user/python/enva/local/lib/python2.7/site-packages/boto-2.2.2_dev-py2.7.egg/boto/dynamodb/layer2.pyc
    in dynamize_range_key_condition(self, range_key_condition)
        83         structure required by Layer1.
        84         """
    ---> 85         return range_key_condition.to_dict()
       86
       87     def dynamize_scan_filter(self, scan_filter):
    
    AttributeError: 'dict' object has no attribute 'to_dict'
    


Answer: If you are using the latest version of boto (and it looks like you are) the
way conditions have been changed from previous versions in an attempt to make
the query more readable. Try this:

    
    
    from boto.dynamodb.condition import *
    conn = boto.connect_dynamodb()
    table = conn.get_table("mytable")
    ...
    result = table.query(
      hash_key = "66", 
      range_key_condition = BETWEEN(0, 9999))
    

It should work although you will have to update your boto code since I just
discovered a bug in BETWEEN while investigating this question (see
<https://github.com/boto/boto/issues/620>).

