Il existe les tables DynamoDB suivantes sur AWS.
client_id_master
client-id
(str)
--Attribut:device-time-stamp
(int)Cette fois, j'ai créé le code suivant pour mettre à jour la valeur de la colonne device-time-stamp
des données de cette table depuis Python (boto3) par la méthode ʻ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)
Cependant, lorsque j'ai exécuté ce code, j'ai eu l'erreur suivante:
An error occurred (ValidationException) when calling the UpdateItem operation: ExpressionAttributeNames contains invalid key: Syntax error; key: \"#device-time-stamp\""
La cause est qu'il y a des restrictions sur les caractères qui peuvent être utilisés dans le nom de variable spécifié par ʻUpdateExpressionde ʻupdate_item ()
, et cette fois -
inclus dans # device-time-stamp
correspond au caractère inutilisable. Une erreur de syntaxe s'est produite.
Par conséquent, en définissant le nom de la variable sur # device_time_stamp
comme indiqué ci-dessous, le code peut être exécuté normalement.
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)
c'est tout
Recommended Posts