Aggiornamenti condizionali in DynamoDB

Aggiornamenti condizionali in DynamoDB
Come in altri database, l'operazione di aggiornamento è tra le chiamate API più comuni in DynamoDB. Inoltre, è possibile utilizzare l'utilità Updatem insieme alle espressioni di condizione in DynamoDB per consentire gli aggiornamenti solo sugli elementi solo se il comando soddisfa le condizioni di configurazione.

Pertanto, gli aggiornamenti condizionali in DynamoDB ti consentiranno di aggiornare gli elementi solo in una tabella solo se alcune condizioni corrispondono. Questa funzione è utile nell'aggiornamento degli elementi anatomicamente, per cui il sistema effettuerà o nessuno dei tuoi aggiornamenti. Inoltre, gli aggiornamenti condizionali avranno successo solo se l'articolo è rimasto lo stesso dall'ultima volta che hai letto l'articolo.

Questo post sul blog evidenzia tutto sugli aggiornamenti condizionali di DynamoDB. Descrive come utilizzare gli aggiornamenti condizionali e fornisce esempi di aggiornamenti condizionali in DynamoDB.

Come utilizzare gli aggiornamenti condizionali in DynamoDB

Per eseguire gli aggiornamenti condizionali in DynamoDB, utilizzare l'operazione UpdateItem e il parametro ConditionExpression. Il parametro dovrebbe assumere la condizione che deve essere soddisfatta per richiedere la corretta applicazione dell'aggiornamento. Se il sistema non riesce a soddisfare la condizione per un motivo o per l'altro, l'aggiornamento fallirà e restituirà un errore.

In particolare, l'operazione UpdateItem supporta anche le espressioni di aggiornamento. Le operazioni con espressioni di aggiornamento aiutano a specificare ogni modifica che si dovrebbe apportare su un articolo.

Un esempi di aggiornamento condizionale DynamoDB sono i seguenti. Tutti gli esempi usano Boto3, che è l'SDK AWS per Python.

Esempio 1: aggiornamento di un elemento solo se un attributo specifico ha un valore particolare.

Gli aggiornamenti condizionali aiutano ad aggiornare un elemento solo se l'attributo ha un valore particolare. Un esempio Python dello stesso è mostrato di seguito:

Importa Boto3
# Crea un client DynamoDB
client = boto3.Client ('DynamoDB')
# Definisci la chiave primaria dell'elemento che si desidera aggiornare
key =
'id': 'n': '1234'

# Definisci i valori di espressione e attributo di aggiornamento
update_expression = 'set #a =: val1, #b =: val2'
espressione_attribute_names =
'#a': 'attributo1',
'#b': 'attributo2'

espressione_attribute_values ​​=
': val1': 'n': '5678',
': val2': 's': 'Abcd'

# Definisci l'espressione della condizione
condition_expression = '#a =: old_val'
condition_expression_attribute_values ​​=
': old_val': 'n': '1234'

# Eseguire l'aggiornamento
Risposta = client.update_item (
Tablename = 'my-table-name',
Tasto = chiave,
Updatexpression = update_expression,
EspressionAttributeNames = espression_attribute_names,
EspressionAttributeValues ​​= espressione_attribute_values,
ConditionExpression = condition_expression,
ExpressionAttributeValues ​​= condition_expression_attribute_values
)

Questa utilità aggiorna l'elemento con la chiave primaria id = 1234 nel il mio nome-table tavolo. Imposterà i valori di attributo1 E attributo2 A 5678 E ABCD, rispettivamente. Tuttavia, l'aggiornamento verrà applicato solo se il valore corrente di attributo1 È 1234. Se il valore di attributo1 è cambiato dall'ultima lettura dell'elemento, l'aggiornamento fallirà e il sistema restituirà un errore.

Esempio 2: aggiornamento di un elemento solo se l'elemento ha un determinato attributo

Il codice per un tale aggiornamento condizionale è come mostrato:

Importa Boto3
# Ottieni il client DynamoDB
client = boto3.Client ('DynamoDB')
# Imposta i valori del tasto e degli attributi elementi
key =
'id': 'n': '123'

update_expression = 'set a =: a, b =: b'
espressione_attribute_values ​​=
': a': 'n': '5',
': b': 's': 'ABC'

# Imposta l'espressione della condizione per verificare se l'elemento ha l'attributo 'C'
condition_expression = 'attribute_exists (c)'
# Aggiorna l'articolo
Risposta = client.update_item (
Tablename = 'my-table-name',
Tasto = chiave,
Updatexpression = update_expression,
EspressionAttributeValues ​​= espressione_attribute_values,
ConditionExpression = condition_expression
)

L'esempio sopra dimostra come aggiornare un elemento in una tabella DynamoDB solo se l'elemento ha un attributo specifico. In questo caso, l'espressione della condizione verificherà l'esistenza del C attributo usando il attributo_exists funzione. Se l'articolo non ha il C attributo, l'aggiornamento fallirà e restituirà un errore.

Esempio 3: aggiornamento di un elemento solo se un attributo particolare ha un valore che supera un valore specifico.

Infine, è possibile impostare il comando per aggiornare un elemento solo se un attributo particolare è maggiore di un valore specifico. L'utilità Python è come mostrato di seguito;

Importa Boto3
# Ottieni il client DynamoDB
client = boto3.Client ('DynamoDB')
# Imposta i valori del tasto e degli attributi elementi
key =
'id': 'n': '1234'

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

# Imposta l'espressione della condizione per verificare se l'attributo "conta" è maggiore di 15
condition_expression = 'count>: count'
espressione_attribute_values ​​[': count'] = 'n': '15'
# Aggiorna l'articolo
Risposta = client.update_item (
Tablename = 'my-table-name',
Tasto = chiave,
Updatexpression = update_expression,
EspressionAttributeValues ​​= espressione_attribute_values,
ConditionExpression = condition_expression
)

L'illustrazione mostra come aggiornare un elemento in una tabella DynamoDB solo se un attributo specifico ha un valore superiore a un valore particolare. In questo caso, l'espressione della condizione controlla se il contare L'attributo è maggiore di 15 usando il > operatore. Se la contare L'attributo è al massimo 15, L'aggiornamento fallirà e riceverai un messaggio di errore.

Conclusione

La funzione di espressione condizionale di DynamoDB è un potente metodo per specificare le condizioni quando si aggiornano gli elementi in una tabella. È utile in molti casi. Ad esempio, puoi usarlo per assicurarsi che un elemento venga aggiornato solo se non è cambiato da quando è stato letto o che un elemento venga aggiornato solo se un attributo particolare ha un valore specifico.