如何使用Python boto3从AWS DynamoDB表中获取特定属性的所有项?

时间:2018-03-22 15:53:13

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

我是AWS Dynamodb的新手。我正在使用python的boto3从dynamodb表中获取特定属性的所有项(例如,属性名称为'Name')。

虽然表格中还有其他属性,如“电子邮件”,“职业”。我需要获取或获取属性“名称”的所有项目。 “我的名称”属性包含四个项目: 尼克,约翰,加里,朱尔斯。 如何使用boto3获取此内容?我尝试使用boto3的client.query方法,但我不确定它是否有效。

4 个答案:

答案 0 :(得分:2)

让我们假设User是您仅想从其中获取NAME属性的表名。首先扫描表并对其进行遍历,并获得NAME属性并存储在列表中。在这里,我将NAME属性的值存储在名为nameList

的列表中
import boto3
import json

def getNames():
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('User')
    response = table.scan()

    nameList = []
    for i in response['Items']:
        nameList.append(i['NAME'])

    return nameList

答案 1 :(得分:1)

如果您有DynamoDB表'Test',如下所示: enter image description here

要获取属性为“名称”的所有项目,请使用以下代码:

from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal


# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            if o % 1 > 0:
                return float(o)
            else:
                return int(o)
        return super(DecimalEncoder, self).default(o)

# us-east-1 is the region name here    
dynamodb = boto3.resource('dynamodb', 'us-east-1')

# Test is the table name here
table = dynamodb.Table('Test')

# Table scan
response = table.scan()

for i in response['Items']: 
    # get all the table entries in json format
    json_str = json.dumps(i, cls=DecimalEncoder)

    #using json.loads will turn your data into a python dictionary
    resp_dict = json.loads(json_str)

    # Getting particular column entries
    # will return None if 'Name' doesn't exist
    print (resp_dict.get('Name'))

示例输出: enter image description here

答案 2 :(得分:1)

不确定是否迟到了,但是您可以使用“ ProjectionExpression”之类的方法从Dynamodb中获取name属性: 例如,在您的情况下,您应该使用

tableparam = { 'ProjectionExpression':"Name" }

reponse = tablename.scan(**tableparams)

对我有用。让我知道它是否对您有帮助。

答案 3 :(得分:0)

使用“扫描”功能时可以使用AttributesToGet。

$('#oki123').on('click', () => getHref...;