Bu modülde, UpdateItem API’yi kullanarak veritabanımızdaki mevcut bir öğenin özniteliklerini güncelleyeceksiniz. Bu modülde, UpdateItem API’yi kullanarak veritabanımızdaki mevcut bir öğenin özniteliklerini güncelleyeceksiniz.

Modülü Tamamlama Süresi: 15 Dakika


Verileri yazma ve okumaya ek olarak, bir veritabanında bulunan mevcut verileri düzenli aralıklarla güncellemeniz de gerekecektir. Bir öğeyi önce okuyup ardından öğenin tamamını sağladığımız güncellemelerle geri yazmak yerine, bu verileri tek çağrıda güncellemek daha makul bir seçenektir. DynamoDB, UpdateItem API çağrısını kullanarak bu öğeleri yerinde güncellemenize olanak tanır.

Bu örnekle ilgili olarak, her öğede kitapçınızın belirli bir kitap için sahip olduğu tüm farklı biçimlerin bir haritası olan Biçimler özniteliğinin bulunduğunu hatırlayın. Zaman içinde bu haritanın, yeni bir biçim eklediğiniz veya bir biçimi bulundurmaya son verdiğiniz gerekçesiyle belirli bir kitap için güncellenmesi gerekir.


  • Bir öğenin güncellenmesi

    Uygulama kodunuzdaki bir öğeyi güncellerken dört unsura odaklanın:

    • Güncellemek istediğiniz öğeyi tanımlayan Anahtar.
    • Güncellemek istediğiniz özniteliklerin yer tutucuları olan ifade özniteliği adları.
    • Özniteliklerinizi güncellemek istediğiniz değerlerin yer tutucuları olan ifade özniteliği değerleri.
    • İstediğiniz güncellemeleri bildirmek için ifade özniteliği adlarını ve ifade özniteliği değerlerini kullanan güncelleme ifadesi.

    Yakın zamanda John Grisham’ın Yağmurcu isimli eseri için bir sesli kitap biçimi eklediğinizi ve DynamoDB tablomuzu bu değişikliği yansıtacak şekilde güncellemek istediğinizi düşünün. UpdateItem API çağrısı aşağıdaki gibi görünecektir.

    # The UpdateItem API allows you to update a particular item as identified by its key.
    resp = table.update_item(
        Key={"Author": "John Grisham", "Title": "The Rainmaker"},
        # Expression attribute names specify placeholders for attribute names to use in your update expressions.
        ExpressionAttributeNames={
            "#formats": "Formats",
            "#audiobook": "Audiobook",
        },
        # Expression attribute values specify placeholders for attribute values to use in your update expressions.
        ExpressionAttributeValues={
            ":id": "8WE3KPTP",
        },
        # UpdateExpression declares the updates you want to perform on your item.
        # For more details about update expressions, see https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html
        UpdateExpression="SET #formats.#audiobook = :id",
    )

    UpdateItem API çağrınızda dört unsurun her biri bulunur. Birincisi, Yazar olarak John Grisham’ı ve Başlık olarak Yağmurcu’yu göstererek üzerinde çalışmak istediği öğenin Anahtar’ını belirtir.

    İkincisi, güncelleme ifadenizde kullanacağınız ifade özniteliği adlarını belirtirsiniz. Harita niteliği taşıyan Biçimler özniteliğini değiştirmekte olduğunuz için hem öznitelik (Biçimler) hem de haritanız (Sesli Kitap) içinde yer alan anahtar için ifade özniteliği adlarını tanımlamanız gerekir.

    Son olarak, UpdateItem API çağrınıza uygulamak istediğiniz güncelleme ifadesini yazarsınız. Bu güncelleme ifadesi, daha önce tanımlanmış olan ifade özniteliği adlarını ve ifade özniteliği değerlerini kullanır. SET #formats.#audiobook = :id ifadeniz, DynamoDB’ye Biçimler özniteliğinin Sesli Kitap anahtarını verilen 8WE3KPTP kimlik değerine ayarlama komutu verir. 

    Üçüncüsü, kullanmak istediğiniz değeri ifade özniteliği değerlerinde belirtirsiniz. Biçimler haritanızda bir biçimin değeri, envanter sisteminizdeki öğe numarasıdır. Bu örnekte değer 8WE3KPTP’dir.

    update_item.py betiği, UpdateItem API çağrısının, modülün daha önceki kısımlarında yer alan kod bloğunda gösterilmesini sağlar. Betik, çağrının yarattığı farkı göstermek için güncelleme çağrısı yapılmadan önce öğeyi alır ve yazdırır. Ardından UpdateItem API çağrısını yapar. Son olarak, betik aradaki farkı göstermek için öğeyi ikinci kez alır ve yazdırır.

    Aşağıdaki komutu çalıştırarak süreci gerçek zamanlı olarak görebilirsiniz.

    $ python update_item.py

    Aşağıdaki çıktıları görmeniz gerekir.

    Item before update:
    {'Title': 'The Rainmaker', 'Formats': {'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}
    Item after update:
    {'Title': 'The Rainmaker', 'Formats': {'Audiobook': '8WE3KPTP', 'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}

    Gördüğünüz gibi, güncelleme uygulandıktan sonra Yağmurcu yeni bir Sesli Kitap biçimine sahip olmuştur.


    Bu modülde, mevcut bir öğenin UpdateItem API kullanılarak nasıl güncellendiğini öğrendiniz. Bir sonraki modülde, ilave ücret ödememek için oluşturduğunuz kaynakları nasıl temizleyeceğinizi öğreneceksiniz.