Python (boto3)에서 DynamoDB의 데이터를 업데이트하려고하면 "ExpressionAttributeNames contains invalid key: Syntax error; key: <keyname>"

5669 단어 파이썬DynamoDBAWS

사건



AWS상에는 다음과 같은 DynamoDB 테이블이 있다.
  • 테이블명: client_id_master
  • 파티션 키: client-id (str)
  • 속성 :
  • device-time-stamp (int)


  • 이번에, 이 테이블상의 데이터의 device-time-stamp 열의 값을, Python(boto3)으로부터 update_item() 메소드에 의해 갱신하는 이하와 같은 코드를 작성했다.
    from datetime import datetime
    import boto3
    
    dynamodb = boto3.resource('dynamodb')
    
    now_unix_time = datetime.now().strftime('%s')
    clientId = 'ef5b728f4a74aed'
    option = {
        'Key': {'client-id': clientId},
        'UpdateExpression': 'set #device-time-stamp = :timeStamp',
        'ExpressionAttributeNames': {
            '#device-time-stamp': 'device-time-stamp'
        },
        'ExpressionAttributeValues': {
            ':timeStamp': now_unix_time
        }
    }
    
    table = dynamodb.Table('client_id_master')
    table.update_item(**option)
    

    그러나이 코드를 실행하면 다음 오류가 발생했습니다.
    An error occurred (ValidationException) when calling the UpdateItem operation: ExpressionAttributeNames contains invalid key: Syntax error; key: \"#device-time-stamp\""
    

    원인 · 해결



    원인으로서는, update_item()UpdateExpression 로 지정하는 변수명에 사용할 수 있는 문자에는 제한이 있어, 이번은 #device-time-stamp 에 포함되는 - 가 이용 불가 문자에 해당했기 때문에 Syntax error가 되고 있었다.

    따라서, 다음과 같이 변수명을 #device_time_stamp 로 하는 것으로 정상적으로 코드를 실행할 수 있게 되었다.
    from datetime import datetime
    import boto3
    
    dynamodb = boto3.resource('dynamodb')
    
    now_unix_time = datetime.now().strftime('%s')
    clientId = 'ef5b728f4a74aed'
    option = {
        'Key': {'client-id': clientId},
        'UpdateExpression': 'set #device_time_stamp = :timeStamp',
        'ExpressionAttributeNames': {
            '#device_time_stamp': 'device-time-stamp'
        },
        'ExpressionAttributeValues': {
            ':timeStamp': now_unix_time
        }
    }
    
    table = dynamodb.Table('client_id_master')
    table.update_item(**option)
    



    이상

    좋은 웹페이지 즐겨찾기