Обновите таблицу DynamoDB, затем получите новое значение - PullRequest
0 голосов
/ 08 мая 2019

Я новичок в Python.У меня есть немного кода на Python в функции Lambda, которая обновляет значение в таблице DynamoDB (ebsDaysToExpire).Это работает.Я застреваю, когда хочу получить новое обновленное значение, чтобы потом передать его в сценарии как часть функции send_mail.

Я попытался добавить в response = table.get_item операторы, но я просто могу 'чтобы это сработало.

            if response['Count'] == 0: #volume not being tracked in table
                try:
                    response = table.put_item(
                        Item={
                            'volID': vid,
                            'ebsDaysToExpire': 7,
                            'snapshotStatus': 'incomplete',
                            'snapshotDate': 'incomplete',
                            'lifecycleStatus': 'start_7',
                            'snapshotID': 'incomplete',
                            'snapshotDaysToExpire': '30'
                        },
                        ConditionExpression='attribute_not_exists(volID)'
                        )
                except ClientError as e:
                    print(e.response['Error']['Message'])
            else:
                try:
                    response = table.update_item(
                        Key={
                            'volID': vid
                        },
                        UpdateExpression='set ebsDaysToExpire = ebsDaysToExpire + :val',
                        ExpressionAttributeValues={
                            ':val': decimal.Decimal(-1)
                        },
                        ReturnValues='UPDATED_NEW'
                    )
                except ClientError as e:
                    print(e.response['Error']['Message'])

1 Ответ

1 голос
/ 10 мая 2019

Так выглядит мой код сейчас, и он возвращает новое значение из таблицы DynamoDB после того, как table_put.item обновит таблицу (возвращаемое значение). Это передается как «xdays». Спасибо Олеру за помощь.

            if response['Count'] == 0: #volume not being tracked in table
                try:
                    response = table.put_item(
                        Item={
                            'volID': vid,
                            'ebsDaysToExpire': 7,
                            'snapshotStatus': 'incomplete',
                            'snapshotDate': 'incomplete',
                            'lifecycleStatus': 'start_7',
                            'snapshotID': 'incomplete',
                            'snapshotDaysToExpire': '30'
                        },
                        ConditionExpression='attribute_not_exists(volID)'
                        )
                except ClientError as e:
                    print(e.response['Error']['Message'])
            else:
                try:
                    response = table.update_item(
                        Key={
                            'volID': vid
                        },
                        UpdateExpression='set ebsDaysToExpire = ebsDaysToExpire + :val',
                        ExpressionAttributeValues={
                            ':val': decimal.Decimal(-1)
                        },
                        ReturnValues='UPDATED_NEW'
                    )
                    xdays = response['Attributes']['ebsDaysToExpire']
                    print xdays
                except ClientError as e:
                    print(e.response['Error']['Message'])
...