Próbuję użyć funkcji update_item
dla DynamoDB w boto3.Czy można połączyć if_not_exists i list_append w update_item
Teraz walczę o aktualizację list artykułów. Chciałbym utworzyć nową listę, jeśli lista jeszcze nie istnieje i w przeciwnym razie dołączy do istniejącej listy.
Korzystanie UpdateExpression
formularza SET my_list = list_append(my_list, :my_value)
zwraca błąd „Dostarczony wyrażenie odnosi się do atrybutu, który nie istnieje w pozycji” jeśli lista jeszcze nie istnieje.
Każdy pomysł, jak będę musiał zmodyfikować mój UpdateExpression
?
Dzięki & pozdrawiam, Fabian
Dzięki za podpowiedź! Dość schludne rozwiązanie. – fabian
Czy masz pojęcie, czy jest to zależne od warunków wyścigu? Przeglądam dokumentację AWS i nie wydaje mi się, żebym miał jakiekolwiek blokady/transakcje (przynajmniej dla Python SDK). Z pewnością wygląda na to, że ten kod mógłby: odczytać listę z DB, b: dołączyć nową wartość, i c: nadpisać starą wartość, która _ mogła zostać zmieniona w międzyczasie. –
Nie mogę znaleźć bezpośredniego potwierdzenia w dokumentacji, ale spodziewam się, że pojedyncza operacja UpdateItem będzie atomowa, najbliższa rzecz, którą znalazłem w faq - "Możesz zwiększyć lub zmniejszyć numeryczny atrybut w wierszu za pomocą pojedynczego wywołania API. Podobnie możesz atomicznie dodawać lub usuwać zestawy, listy lub mapy ", zobacz https://aws.amazon.com/dynamodb/faqs/ –