我正在跟随DynamoDB Python教程。这一步展示了如何基于特定的键查询表格:http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.04.html。
以下是此查询的代码:
一个示例的响应项是:
有两个关键属性'title'和'year',以及嵌套属性'info'。我想做的是查询数据库并通过类型过滤电影,例如获取所有的戏剧电影。我不确定如何做到这一点,因为类型键被嵌套在信息中。
我尝试过像这样获取1992年所有的戏剧电影,但没有结果。
我该如何使用嵌套的info属性正确地过滤此查询?
以下是此查询的代码:
from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr
# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return str(o)
return super(DecimalEncoder, self).default(o)
dynamodb = boto3.resource('dynamodb', region_name='us-west-2', endpoint_url="http://localhost:8000")
table = dynamodb.Table('Movies')
print("Movies from 1992 - titles A-L, with genres and lead actor")
response = table.query(
ProjectionExpression="#yr, title, info.genres, info.actors[0]",
ExpressionAttributeNames={ "#yr": "year" }, # Expression Attribute Names for Projection Expression only.
KeyConditionExpression=Key('year').eq(1992) & Key('title').between('A', 'L')
)
for i in response[u'Items']:
print(json.dumps(i, cls=DecimalEncoder))
一个示例的响应项是:
{
"title": "Juice",
"year": "1992",
"info": {
"actors": [
"Omar Epps"
],
"genres": [
"Crime",
"Drama",
"Thriller"
]
}
}
表格我尝试过像这样获取1992年所有的戏剧电影,但没有结果。
response = table.query(
KeyConditionExpression=Key('year').eq(1992),
FilterExpression=Attr('info.genres').eq('Drama')
)
我该如何使用嵌套的info属性正确地过滤此查询?