AWS CLI ile DynamoDB UpdateItem
Beş argüman, bunların üçü DynamoDB JSON ve hepsi kabuğunuzla boğuşuyor: aws dynamodb update-item'ı zahmetli kılan budur, güncellemenin kendisi değil. CLI'ın diğer her istemcinin üstüne kattığı şey, isteğin reddedilebileceği ikinci bir yer ve hangisi olduğunu size söyleyecek kadar kesin bir çıkış kodu kümesidir.
Kod
aws dynamodb update-item \
--table-name 'Music' \
--key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
--update-expression 'SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2' \
--expression-attribute-names '{"#upd0":"Genre","#upd1":"Year","#upd2":"Awards"}' \
--expression-attribute-values '{":updValue0":{"S":"Latin Jazz"},":updValue1":{"N":"1994"},":updValue2":{"N":"1"}}' \
--return-values ALL_NEWNe Genre ne de Awards içeren bir öğeye karşı çalıştırıldığında o komut şunu yazdırır:
{
"Attributes": {
"Artist": {
"S": "Arturo Sandoval"
},
"Awards": {
"N": "1"
},
"Genre": {
"S": "Latin Jazz"
},
"Year": {
"N": "1994"
},
"SongTitle": {
"S": "Cubano Chant"
}
}
}Yok olan bir Awards üzerindeki ADD onu sıfırdan başlattı ve öznitelikler, ifadenin onları yazdığı sıra yerine hizmetin sırasıyla geri geldi. Bunu konuma dayalı hiçbir şeye boruyla vermeyin.
Açıklama
--key— DynamoDB JSON olarak tam birincil anahtar. Bileşik anahtarlı bir tablonun yalnızca bölüm anahtarını geçirin, kısmi bir eşleşme değilValidationException: The number of conditions on the keys is invalidalırsınız.--update-expression—--expression-attribute-namesüzerinden takma adlandırılmışSET,ADD,REMOVEveDELETEyan tümceleri. BuradakiADD #upd2 :updValue2,Awardsüzerinde atomik bir artırmadır; tam yan tümce grameri güncelleme ifadeleri içindedir.Sayılar tırnaklanmış dizelerdir ve CLI bunu DynamoDB'den önce denetler.
{"N":"1994"}yerine{"N":1994}yazın; makinenizden hiçbir şey ayrılmaz:aws: [ERROR]: An error occurred (ParamValidation): Parameter validation failed: Invalid type for parameter ExpressionAttributeValues.:y.N, value: 1994, type: <class 'int'>, valid types: <class 'str'>Çıkış kodu size hangi yarının başarısız olduğunu söyler. O istemci tarafı reddi 252 ile çıkar. DynamoDB'nin gerçekten yanıtlayıp reddettiği bir istek ise 254 ile çıkar:
aws: [ERROR]: An error occurred (ValidationException) when calling the UpdateItem operation: Invalid UpdateExpression: Attribute name is a reserved keyword; reserved keyword: Year252 her zaman JSON'ınızdaki bir hatadır. 254 ise bilinçli olarak başarısız olmasını beklediğiniz bir koşul olabilir, dolayısıyla betikler sıfırdan farklı olma üzerinden değil bu ikisi üzerinden dallanmalıdır.
--return-valuesolmadan komut hiçbir şey yazdırmaz ve 0 ile çıkar. grep'leyecek bir "1 öğe güncellendi" satırı yoktur, dolayısıyla sessizlik başarıdır.UPDATED_NEWyalnızca ifadenin dokunduğu öznitelikleri döndürür; yalnızca yeni sayaç değerine ihtiyacınız olduğunda ucuz seçenek budur.Bir kez tırnaklayın, sonra bir dosya kullanın. Kabuk
"ve$'a dokunmasın diye her JSON argümanını tek tırnak içine alın ve uzun olan her şeyi iki kez kaçış karakteriyle uğraşmak yerine--expression-attribute-values file://values.jsoniçine taşıyın.Upsert anlamı —
update-item, anahtar yoksa öğeyi oluşturur;Awards'ın yukarıda böyle belirmesinin nedeni budur. Yalnızca-güncelle yapmak için--condition-expression "attribute_exists(Artist)"ekleyin.
Burada hiçbir şey ifadeyi sizin yerinize oluşturmuyor
Bu sitede belgelenen beş istemciden tam olarak biri bir UpdateExpression üretir: Go SDK'sının expression paketi. Node, Python ve Java'nın hepsi dizeyi size yazdırır. CLI, dördü arasında en kötü durumdur, çünkü aynı karakterleri yorumlamak isteyen bir kabuğun içinde hem iki takma ad haritasını hem de DynamoDB JSON'ı elle yazıyorsunuz.
DynamoDB Expression Builder o boşluğu kapatır: yan tümceleri tarayıcıda birleştirin, hazır tırnaklanmış bir aws dynamodb update-item komutunu kopyalayın. Aynı düzenlemeyi tek bir tırnak kaçırmadan gerçek bir tabloya karşı yapmak için DynoTable'ı indirin.
İlgili kılavuzlar
- DynamoDB güncelleme ifadeleri —
SET,ADD,REMOVE,DELETEve deyimler. - ReturnValues'ı anlamak — her
--return-valuesseçeneğinin size ne verdiği. - "Attribute name is a reserved keyword" — buradaki takma ad haritasının neden isteğe bağlı olmadığı.
- "Invalid UpdateExpression" sözdizimi hataları — yaygın SET/ADD sözdizimi hataları, çözümlenmiş.
Kaynaklar
- UpdateItem — Amazon DynamoDB API Reference
- update-item — AWS CLI Command Reference
- Update expressions — Amazon DynamoDB Developer Guide
En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.