2017-10-17 27 views
0

J'essaie d'utiliser le code suivant, mais je n'arrive pas à le faire fonctionner. Il continue à me donner un message d'erreur à propos de l'expression du filtre étant le type incorrect, même si je fais exactement ce qui est fait dans the documentation. Que puis-je faire pour résoudre ce problème?Boto Scan Filterexpression: Type non valide pour le paramètre

def EndpointDeleted(event): 
 
    endpoint = event['Attributes']['EndpointArn'] 
 
    if('EndpointArn' in event['Attributes']): 
 
     client = boto3.client('dynamodb') 
 
     response = client.scan(
 
      TableName='sniffergps-mobilehub-812282467-Users', 
 
      Select='ALL_ATTRIBUTES', 
 
      FilterExpression=Attr('Endpoints').contains(endpoint) 
 
     ) 
 
     return response

Mais je reçois une erreur disant que l'expression de filtre est le type incorrect. Je les messages d'importation suivants: import boto3 from boto3.dynamodb.conditions import Key from boto3.dynamodb.conditions import Attr

Message d'erreur:

{ 
 
    "errorMessage": "Parameter validation failed:\nInvalid type for parameter FilterExpression, value: <boto3.dynamodb.conditions.Contains object at 0x7fdca25e0b38>, type: <class 'boto3.dynamodb.conditions.Contains'>, valid types: <class 'str'>", 
 
    "errorType": "ParamValidationError", 
 
    "stackTrace": [ 
 
    [ 
 
     "/var/task/lambda_function.py", 
 
     13, 
 
     "lambda_handler", 
 
     "return EndpointDeleted(event)" 
 
    ], 
 
    [ 
 
     "/var/task/lambda_function.py", 
 
     24, 
 
     "EndpointDeleted", 
 
     "FilterExpression=Attr('Endpoints').contains(endpoint)" 
 
    ], 
 
    [ 
 
     "/var/runtime/botocore/client.py", 
 
     312, 
 
     "_api_call", 
 
     "return self._make_api_call(operation_name, kwargs)" 
 
    ], 
 
    [ 
 
     "/var/runtime/botocore/client.py", 
 
     575, 
 
     "_make_api_call", 
 
     "api_params, operation_model, context=request_context)" 
 
    ], 
 
    [ 
 
     "/var/runtime/botocore/client.py", 
 
     630, 
 
     "_convert_to_request_dict", 
 
     "api_params, operation_model)" 
 
    ], 
 
    [ 
 
     "/var/runtime/botocore/validate.py", 
 
     291, 
 
     "serialize_to_request", 
 
     "raise ParamValidationError(report=report.generate_report())" 
 
    ] 
 
    ] 
 
}

Répondre

2

Notez la différence de syntaxe entre la Boto3 DynamoDB Client, et le tableau Resource.

Le paramètre FilterExpression pour le client DynamoDB attend une chaîne.

La méthode que vous utilisez pour définir le paramètre FilterExpression ressemble à la façon dont vous utiliseriez une ressource DynamoDB.Table.