Betingede oppdateringer i DynamoDB

Betingede oppdateringer i DynamoDB
Som i andre databaser, er UpdateItem -operasjonen blant de vanligste API -samtalene i DynamoDB. Videre kan du bruke UpdateItem-verktøyet sammen med betingelsesuttrykk i DynamoDB for bare å tillate oppdateringer på elementer bare hvis kommandoen oppfyller utmerkede forhold.

Dermed vil betingede oppdateringer i DynamoDB bare tillate deg å oppdatere elementer i en tabell bare hvis visse forhold samsvarer. Denne funksjonen er nyttig med å oppdatere elementer anatomisk, der systemet ditt enten vil påvirke alle eller ingen av oppdateringene dine. Dessuten vil betingede oppdateringer bare lykkes hvis varen har holdt seg den samme siden du sist leste varen.

Dette blogginnlegget fremhever alt om DynamoDB -betingede oppdateringer. Den skisserer hvordan du bruker betingede oppdateringer og gir eksempler på betingede oppdateringer i DynamoDB.

Hvordan bruke betingede oppdateringer i DynamoDB

For å utføre betingede oppdateringer i DynamoDB, bruk UpdateItem -operasjonen og tilstandsuttrykksparameteren. Parameteren skal ta betingelsen som må være fornøyd for å nødvendiggjøre vellykket anvendelse av oppdateringen. Skulle systemet ditt ikke oppfylle tilstanden av en eller annen grunn, vil oppdateringen mislykkes og returnere en feil.

Spesielt støtter UpdateItem -operasjonen også oppdateringsuttrykk. Operasjoner med oppdateringsuttrykk hjelper til med å spesifisere hver modifisering du bør gjøre på et element.

Et dynamodb betingede oppdateringseksempler er som følger. Alle eksemplene bruker BOTO3, som er AWS SDK for Python.

Eksempel 1: Oppdatering av et element bare hvis et spesifikt attributt har en bestemt verdi.

Betingede oppdateringer hjelper deg med å oppdatere et element bare hvis attributtet har en bestemt verdi. Et Python -eksempel på det samme er vist nedenfor:

Importer BOTO3
# Opprett en DynamoDB -klient
klient = BOTO3.klient ('dynamodb')
# Definer den primære nøkkelen til varen du vil oppdatere
nøkkel =
'id': 'n': '1234'

# Definer oppdateringsuttrykk og attributtverdier
update_expression = 'set #a =: val1, #b =: val2'
expression_attribute_names =
'#A': 'attributt1',
'#B': 'attributt2'

expression_attribute_values ​​=
': val1': 'n': '5678',
': val2': 's': 'abcd'

# Definer tilstandsuttrykket
condition_expression = '#a =: old_val'
condition_expression_attribute_values ​​=
': old_val': 'n': '1234'

# Utfør oppdateringen
Svar = klient.UPDATE_ITEM (
Tablename = 'my-table-name',
Nøkkel = nøkkel,
Updatexpression = update_expression,
ExpressionAttributeNames = expression_attribute_names,
ExpressionAttributeValues ​​= expression_attribute_values,
ConditionExpression = condition_expression,
ExpressionAttributeValues ​​= condition_expression_attribute_values
)

Dette verktøyet oppdaterer varen med primærnøkkel ID = 1234 i My-table-name bord. Det vil sette verdiene til attributt1 og attributt2 til 5678 og ABCD, henholdsvis. Oppdateringen vil imidlertid bare bli brukt hvis den nåværende verdien av attributt1 er 1234. Hvis verdien av attributt1 har endret seg siden varen sist ble lest, oppdateringen vil mislykkes og systemet ditt vil returnere en feil.

Eksempel 2: Oppdatering av et element bare hvis varen har en viss attributt

Koden for en slik betinget oppdatering er som vist:

Importer BOTO3
# Få DynamoDB -klienten
klient = BOTO3.klient ('dynamodb')
# Angi varetasten og attributtverdiene
nøkkel =
'id': 'n': '123'

update_expression = 'set a =: a, b =: b'
expression_attribute_values ​​=
': a': 'n': '5',
': b': 's': 'abc'

# Angi betingelsesuttrykket for å sjekke om elementet har 'C' attributtet
condition_expression = 'attributt_exists (c)'
# Oppdater varen
Svar = klient.UPDATE_ITEM (
Tablename = 'my-table-name',
Nøkkel = nøkkel,
Updatexpression = update_expression,
ExpressionAttributeValues ​​= expression_attribute_values,
ConditionExpression = condition_expression
)

Eksemplet over viser hvordan du oppdaterer et element i en DynamoDB -tabell bare hvis varen har et spesifikt attributt. I dette tilfellet vil betingelsesuttrykket sjekke for eksistensen av c attributt ved hjelp av attributt_eksister funksjon. Hvis varen ikke har c attributt, oppdateringen vil mislykkes og returnere en feil.

Eksempel 3: Oppdatering av et element bare hvis et bestemt attributt har en verdi som overskrider en spesifikk verdi.

Til slutt kan du angi kommandoen til å oppdatere et element bare hvis en bestemt attributt er større enn en spesifikk verdi. Python -verktøyet er som vist nedenfor;

Importer BOTO3
# Få DynamoDB -klienten
klient = BOTO3.klient ('dynamodb')
# Angi varetasten og attributtverdiene
nøkkel =
'id': 'n': '1234'

update_expression = 'set a =: a, b =: b'
expression_attribute_values ​​=
': a': 'n': '15',
': b': 's': 'abcd'

# Angi betingelsesuttrykket for å sjekke om 'telling' -attributtet er større enn 15
condition_expression = 'count>: count'
expression_attribute_values ​​[': count'] = 'n': '15'
# Oppdater varen
Svar = klient.UPDATE_ITEM (
Tablename = 'my-table-name',
Nøkkel = nøkkel,
Updatexpression = update_expression,
ExpressionAttributeValues ​​= expression_attribute_values,
ConditionExpression = condition_expression
)

Illustrasjonen viser hvordan du oppdaterer et element i en DynamoDB -tabell bare hvis en spesifikk attributt har en verdi som er større enn en bestemt verdi. I dette tilfellet sjekker betingelsesuttrykket om telle attributtet er større enn 15 bruker > operatør. Hvis telle attributt er på det meste 15, Oppdateringen vil mislykkes, og du vil motta en feilmelding.

Konklusjon

DynamoDBs betingede uttrykksfunksjon er en kraftig metode for å spesifisere forhold når du oppdaterer elementer i en tabell. Det er nyttig i mange tilfeller. For eksempel kan du bruke den for å sikre at et element bare oppdateres hvis det ikke har endret seg siden det ble lest eller at et element bare oppdateres hvis et bestemt attributt har en spesifikk verdi.