【发布时间】:2015-10-01 10:06:18
【问题描述】:
我正在使用boto.dynamodb2,看来我可以使用Table.query_count()。但是,当没有应用查询过滤器时,它会引发异常。
我能做些什么来解决这个问题?
顺便说一句,boto.dynamodb2.table.Table.Query 可以使用的过滤器文档在哪里?我试图搜索它,但什么也没找到。
【问题讨论】:
标签: python amazon-dynamodb boto
我正在使用boto.dynamodb2,看来我可以使用Table.query_count()。但是,当没有应用查询过滤器时,它会引发异常。
我能做些什么来解决这个问题?
顺便说一句,boto.dynamodb2.table.Table.Query 可以使用的过滤器文档在哪里?我试图搜索它,但什么也没找到。
【问题讨论】:
标签: python amazon-dynamodb boto
您可以通过两种方式在 DynamoDB 中获取行数。
第一个是执行全表扫描并在执行过程中计算行数。对于任何合理大小的表,这通常是一个可怕的想法,因为它会消耗您预置的所有读取吞吐量。
另一种方法是使用Describe Table 请求来估计表中的行数。这将立即返回,但只会根据 AWS 文档定期更新。
指定索引中的项目数。 DynamoDB 更新了这个 值大约每六个小时。最近的变化可能不是 反映在这个值中。
【讨论】:
根据文档boto3
“指定表中的项目数。DynamoDB 大约每六个小时更新一次此值。最近的更改可能不会反映在此值中。”
import boto3
dynamoDBResource = boto3.resource('dynamodb')
table = dynamoDBResource.Table('tableName')
print(table.item_count)
或者你可以使用DescribeTable:
import boto3
dynamoDBClient = boto3.client('dynamodb')
table = dynamoDBClient.describe_table(
TableName='tableName'
)
print(table)
【讨论】:
如果要统计物品的数量:
import boto3
client = boto3.client('dynamodb','us-east-1')
response = client.describe_table(TableName='test')
print(response['Table']['ItemCount'])
#ItemCount (integer) --The number of items in the specified table.
# DynamoDB updates this value approximately every six hours.
# Recent changes might not be reflected in this value.
参考:Boto3 文档(在 describe_table() 中的 ItemCount 下)
【讨论】:
您可以使用它来获取整个表格项目的计数
from boto.dynamodb2.table import Table
dynamodb_table = Table('Users')
dynamodb_table.count() # updated roughly 6 hours
参考这里:http://boto.cloudhackers.com/en/latest/ref/dynamodb2.html#module-boto.dynamodb2.table
query_count 方法将根据您提供的索引返回项目计数。
例如,
from boto.dynamodb2.table import Table
dynamodb_table = Table('Users')
print dynamodb_table.query_count(
index='first_name-last_name-index', # Get indexes from indexes tab in dynamodb console
first_name__eq='John', # add __eq to your index name for specific search
last_name__eq='Smith' # This is your range key
)
您可以添加主索引或全局二级索引以及范围键。 可能的比较运算符
__eq 表示相等
__lt 小于
__gt 表示大于
__gte 表示大于或等于
__lte 表示小于或等于
__between for between
__beginswith for 开始于
之间的示例
print dynamodb_table.query_count(
index='first_name-last_name-index', # Get indexes from indexes tab in dynamodb console
first_name__eq='John', # add __eq to your index name for specific search
age__between=[30, 50] # This is your range key
)
【讨论】: