加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – DynamoDB – 如何查询嵌套属性boto3

发布时间:2020-12-20 11:58:47 所属栏目:Python 来源:网络整理
导读:我正在关注DynamoDB python教程.此步骤显示如何基于特定密钥查询表: http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.04.html. 以下是此查询的代码: from __future__ import print_function # Python 2/3 co
我正在关注DynamoDB python教程.此步骤显示如何基于特定密钥查询表: http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.04.html.

以下是此查询的代码:

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"
        ]
    }
}

该表有两个关键属性’title’和’year’以及嵌套属性’info’.我想要做的是查询数据库并按流派过滤电影,例如获取所有戏剧电影.我不知道如何做到这一点,因为类型键嵌套在内部信息.

我试图从1992年开始拍摄所有的戏剧电影,但它却一片空白.

response = table.query(
    KeyConditionExpression=Key('year').eq(1992),FilterExpression=Attr('info.genres').eq('Drama')
)

如何使用嵌套的info属性正确过滤此查询?

解决方法

您可以使用contains来过滤List数据类型中的数据.

genres -attribute存储为List inside info属性,这是一种Map数据类型

FilterExpression=Attr('info.genres').contains('Drama')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读