关于Boto Dynamodb aws的澄清问题

时间:2014-07-09 20:36:03

标签: python amazon-web-services amazon-dynamodb boto

我读到了这个:http://boto.readthedocs.org/en/latest/ref/dynamodb2.html

但我还有几个问题。

在:

results = users.scan(
...     age__in=[25, 26, 27, 28, 29],
...     limit=1
... )

寻求确认的问题: 1)用户是发电机表。 2)年龄与存储时的数据[“年龄”]类似。所以像这样:

def createSwfInDynamo(key,images,text):
    data={}
    data["time"]=five
    data["age"]=25
    newI = swfTable.new_item(id,data["time"], data)
    newI.save()
可以使用users.scan扫描

3)另外__不是对象名称,而是将比较运算符分开。因此,age__in意味着列年龄必须在[25,26,27,28,29]。

4)Limit = 1表示用户只想返回1个匹配项?

5)最后我知道dynamo只返回前1个或1000个对象。如果我想让所有匹配到扫描,我怎么能很好地迭代?

2 个答案:

答案 0 :(得分:1)

1)2)是

3)我不知道

4)和5)

假设您的表中有100个项目,并且您想要扫描表格。您可以将限制设置为25并将扫描调用4次。或者您可以将限制设置为1并调用扫描API 100次。在扫描回复中,您应该保存LastEvaluatedKey并将其作为ExclusiveStartKey传递给下一次扫描调用。

例如,如果您的设置限制为25,那么您的扫描结果将包含LastEvaluatedKey,这是DynamoDB服务查找第26项的提示。

示例基于我从here

借来的代码
def search(table, scan_filter=None, range_key=None,
           attributes_to_get=None,
           limit=None):

    start_key = None

    while True:
        results = self.conn.layer1.scan(table_name=table,
                                  attributes_to_get=attributes_to_get,
                                  exclusive_start_key=start_key,
                                  limit=request_limit)
        # do stuff with your results

        start_key = results['LastEvaluatedKey']
        if start_key is None:
            break

我建议您现在使用DynamoDB的低级Python API,因为它更类似于Java API,您可以在线获得有关基本API的更多信息。一旦您感觉更舒服,您就可以转向更高级别的API,从而提高您的工作效率。

答案 1 :(得分:0)

  1. users是表格

  2. "这是正确的年龄"是变量名称

    我发现了here

    检查源代码后,似乎将参数拆分为__

  3. 因此,是的,在这种情况下,结尾是参数/运算符。

  4. @Erben Mo提供的解决方案