【问题标题】:check if a value exists in dynamodb table using python and fetch that record使用python检查dynamodb表中是否存在值并获取该记录
【发布时间】:2020-09-03 03:26:40
【问题描述】:

我是 Dynamodb 的新手,目前正在学习。我正在使用 python 查询 dynamodb 以根据 IF 条件获取一些记录。

我有一个 dynamodb 表 cus_token,只有两个属性 a) customerId 和 b) token

当用户提供令牌时,检查 cus_token 表中是否存在该令牌,如果存在,我想查询并获取该令牌的 customerID。我试图这样做

假设 user_input = "Rooxp9"(这是cus_token表中的一个token)

先获取所有带有token属性的值

import boto3
import json

def gettokens(y):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('cus_token')
    response = table.scan()

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

    return tokens

temp = gettokens(cus_token)

使用 IF 条件检查

for item in temp:
    if item == user_input:
        "Here I want to write the code to fetch the customerID"

【问题讨论】:

    标签: python python-3.x amazon-dynamodb boto3 dynamodb-queries


    【解决方案1】:

    听起来你想获取一个customerID给定一个token

    要对您当前的表设计执行此操作,您需要使用 Filter Expression 来要求 DynamoDB 返回 token 等于用户输入的所有属性。例如,这是一个伪代码中的 sn-p:

    response = table.scan({"FilterExpression": "#token = :token",
                           "ExpressionAttributeNames": {"#token":"token"},
                           "ExpressionAttributeValues": {":token": {"S": <user_input>}})
    
    

    无需扫描整个数据库,将其返回到您的应用程序,然后在您的应用程序中过滤结果。

    如果您刚刚开始使用 DynamoDB,我强烈推荐 The DynamoDB Guide website。它很好地向初学者解释了 DynamoDB。

    【讨论】:

    • 我还想验证用户给定的令牌是否与表中存在的令牌匹配。仅当令牌匹配时,我才需要获取相应的 customerID
    • 此扫描操作将仅返回令牌与您要求的内容(用户输入)匹配的项目。如果没有匹配,您将不会得到任何结果。无需额外验证。默认情况下,扫描操作将返回匹配项目中的所有属性,这意味着您的结果中将包含 CustomerID。
    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多