DynamoDB update_item: «При вызове операции UpdateItem: сбой условного запроса» (Python) - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь обновить существующий элемент в моей базе данных Dynamo DB на основе 2 вещей: 1) дата извлечения и 2) URL элемента.Однако я получаю сообщение об ошибке «Условный запрос не выполнен».

Я реализовал приведенный ниже код;однако ошибка продолжала заполняться.

Если полезно, мой первичный ключ раздела - "itemUuid (String)" (не используется первичный ключ сортировки).Дата указывается в формате «м / д / гггг».

    if response['ResponseMetadata']['HTTPStatusCode'] == 200 :
        table_page1Update.update_item(Key={'itemUuid' : str(item['itemUuid'])},
                    UpdateExpression = 'SET readSuccess = :readSuccess',
                    ConditionExpression = 'extractionDate = :extractionDate AND itemUrl = :itemUrl',
                    ExpressionAttributeValues={
                        ':readSuccess' : 'OK',
                        ':itemUrl' : 'http://url_of_item_in_db_field.com',
                        ':extractionDate' : config.DATETIMEFOREXPORT
                    }
        )

Я ожидаю, что поле readSuccess заполнится как «ОК» для элементов, соответствующих дате и itemUrl.

1 Ответ

0 голосов
/ 17 июня 2019

Может быть интерпретировано динамо в неверном формате, вы пробовали следующее (я сделал все строковым типом, включая дату, потому что даты хранятся в виде строк в динамо):

    if response['ResponseMetadata']['HTTPStatusCode'] == 200 :
        table_page1Update.update_item(Key={'itemUuid' : {'S' : str(item['itemUuid'])}},
                    UpdateExpression = 'SET readSuccess = :readSuccess',
                    ConditionExpression = 'extractionDate = :extractionDate AND itemUrl = :itemUrl',
                    ExpressionAttributeValues={
                        ':readSuccess' : { 'S':'OK' },
                        ':itemUrl' : { 'S':'http://url_of_item_in_db_field.com' },
                        ':extractionDate' : { 'S':config.DATETIMEFOREXPORT }
                    }
        )
...