Python (boto3)에서 DynamoDB의 데이터를 업데이트하려고하면 "ExpressionAttributeNames contains invalid key: Syntax error; key: <keyname>"
사건
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)
이상
Reference
이 문제에 관하여(Python (boto3)에서 DynamoDB의 데이터를 업데이트하려고하면 "ExpressionAttributeNames contains invalid key: Syntax error; key: <keyname>"), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/r-wakatsuki/items/118ef8fb509d145af306텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)