UpdateExpression構文のために失敗し、次のように私のPythonコードでは、私はリソースが初期化されています:/DynamoDBの中のアイテムを更新すると、私はDynamoDBのテーブルを作成しました
self.dynamodb = self.session.resource('dynamodb').Table('aws-ci')
テーブルが持つただ一つのインデックス/キーの名前はenvironment
です。
{
"environment": "beta",
"X": {
"current_sha": "sha1",
"deployed": true,
"prev_sha": "sha2",
"status": "inactive"
},
"Y-Z": {
"current_sha": "sha1",
"deployed": false,
"prev_sha": "sha2",
"status": "active"
}
}
、X
とY-Z
はマイクロサービスの名称です:次のように私は、それにPUT
にオブジェクトをしようとしています。次のように私の挿入コードは次のとおりです。
def put_service_data(self, environment, service_name, service_data, status = None):
get_previous = self.dynamodb.get_item(
Key = {
'environment': environment
}
).get(service_name)
service_data['prev'] = get_previous and get_previous.get('current_sha') or 'NULL'
if status == 'rollback' and get_previous:
service_data['current'] = get_previous.get('current_sha')
service_data['prev'] = get_previous.get('prev_sha')
set_query = "SET {0}.current_sha = :current, {0}.prev_sha = :prev, {0}.deployed = :is_deployed, {0}.current_status = :status".format(service_name)
updated = self.dynamodb.update_item(
Key = {
'environment': environment
},
UpdateExpression = set_query,
ExpressionAttributeValues = {
':current': service_data.get('current'),
':prev': service_data.get('prev'),
':status': service_data.get('status'),
':is_deployed': service_data.get('deployed')
},
ReturnValues = "ALL_NEW"
)
return updated
以前は、代わりに{0}.current_status
の、私は{0}.status
を持っていたが、それは次のエラー提起:とにかく
An error occurred (
ValidationException
) when calling theUpdateItem
operation: InvalidUpdateExpression
: Attribute name is a reserved keyword; reserved keyword:status
を、私はcurrent_status
と試みたにその属性名の名前を変更しましたもう一度挿入します。
An error occurred (
ValidationException
) when calling theUpdateItem
operation: The document path provided in the update expression is invalid for update
サービスの属性を設定しようとすると、X 、およびY-Zのためにしようとするときは、次の
An error occurred (
ValidationException
) when calling theUpdateItem
operation: InvalidUpdateExpression
: Syntax error; token: "-", near: "Y-Z"
私はupdate_item
コールがどのように動作するかを理解することが現在できませんよ。
そうです。 :/私はどのように私はドキュメントでそのパラメータを見逃しているのかわかりません。 – hjpotter92
'current_status'を' status'に戻しても動作しますか? – hjpotter92
これを行うと、ExpressionAttributeNamesにステータスを追加する必要があります –