Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Tables et éléments dans DynamoDB

Après cette leçon: Je peux lire et écrire un élément DynamoDB sous sa forme typée.

Leçon de 55 min5 commandesLab Cloud : s’exercer avec des buckets S3, des files SQS et des tables DynamoDB en ligne de commande AWS

Enregistrer une commande

Une boutique enregistre chaque commande pour la retrouver plus tard. Une table DynamoDB fait ce travail.

Contrairement à un tableur, chaque valeur d’un élément DynamoDB dit de quel type elle est. Cette leçon montre comment lire et écrire ces valeurs typées en Python.

À la fin de cette leçon

Remarque

Je peux lire et écrire un élément DynamoDB sous sa forme typée.

Mots-clés

MotCe que ça veut direExemple
Tableun ensemble nommé d’éléments
Élémentun enregistrement d’une tableitem
Attributune valeur nommée à l’intérieur d’un élément
Lettre de typele code qui dit quelle sorte de valeur c’estS
Ensemble de chaînesun groupe de chaînes différentes, sans ordre

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Chaque valeur porte sa lettre de type

Une table DynamoDB contient des éléments. Un élément est un ensemble d’attributs, chacun avec un nom et une valeur.

La valeur est un dictionnaire à une seule clé, une lettre de type, comme {"S": "thé"}. S est une chaîne et N un nombre. BOOL vaut vrai ou faux, et NULL veut dire aucune valeur.

Exemple travaillé : les lettres de type

LettreContientExemple
Sune chaîne{"S": "thé"}
Nun nombre, écrit en texte{"N": "4"}
BOOLvrai ou faux{"BOOL": false}
NULLaucune valeur{"NULL": true}
SSun ensemble de chaînes, sans ordre fixe{"SS": ["urgent", "fragile"]}

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Lire un élément

Code: python
reponse = {
    "Item": {
        "client": {"S": "ana"},
        "cadeau": {"BOOL": False},
        "article": {"S": "thé"},
        "note": {"NULL": True},
        "numero_commande": {"N": "1"},
        "statut": {"S": "payée"},
        "etiquettes": {"SS": ["urgent", "fragile"]},
        "total": {"N": "4"},
    }
}
element = reponse["Item"]
for nom in element:
    for lettre in element[nom]:
        print(nom, "a pour type", lettre)
print("article :", element["article"]["S"])
# Ajoutez une ligne qui affiche le statut.

Un nombre voyage en texte

DynamoDB envoie chaque nombre comme une chaîne, par exemple {"N": "15"}, pour que chaque chiffre arrive tel qu’il a été écrit.

Pour l’utiliser, convertissez-le avec int("15") ou float("2.5"). Pour l’enregistrer, remettez-le en texte avec str.

Exemple travaillé : utiliser un nombre

ÉtapePythonRésultat
Liretotal["N"]"15"
Convertirint(total["N"])15
Ajouter unint(total["N"]) + 116
Réécrire{"N": str(16)}{"N": "16"}

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le texte contre le nombre

Code: python
total = {"N": "15"}
print(total["N"] + "1")
print(int(total["N"]) + 1)
print("9" > "15", 9 > 15)
print({"N": str(16)})
# Remplacez "15" par "40". Que donne chaque ligne maintenant ?

Erreur fréquente

Attention

Beaucoup croient que {"N": "15"} contient le nombre 15. Il contient le texte « 15 ». Ajouter à un texte, c’est le coller : "15" + "1" donne « 151 ». Convertissez avec int ou float avant toute somme, et utilisez str pour réécrire.

Un élément absent donne une réponse vide

Demander un élément qui n’existe pas n’est pas une erreur. get_item répond sans aucune clé Item.

Une écriture avec condition, comme « seulement si cette commande est nouvelle », peut être refusée. L’erreur a le Code ConditionalCheckFailedException et le statut 400. Le fichier capturé l’écrit {"error": ...}. boto3 lève une exception qui porte le même Code et le même statut.

Trouvé, absent et refusé

Code: python
trouve = {"Item": {"client": {"S": "ana"}, "note": {"NULL": True}}}
absent = {}
refuse = {"error": {"Code": "ConditionalCheckFailedException", "HTTPStatusCode": 400}}
for reponse in [trouve, absent]:
    if "Item" in reponse:
        print("trouvé, la note est nulle :", reponse["Item"]["note"]["NULL"])
    else:
        print("aucun élément")
print(refuse["error"]["Code"], refuse["error"]["HTTPStatusCode"])
# Remplacez la note par {"S": "carte cadeau"}, puis lisez-la avec ["S"].

Essayez-le dans le lab cloud

Le lab cloud est une copie d'entraînement de S3, SQS et DynamoDB. Appuyez sur Démarrer le lab dans la barre, puis sur Exécuter pour chaque commande ci-dessous. Elles utilisent la vraie ligne de commande AWS, les mêmes mots marchent donc sur un vrai compte. La dernière commande n'affiche rien : un élément absent est ici une réponse vide, pas une erreur. Cette étape sert à s'exercer. Le travail ci-dessous reste du Python simple : vous pouvez le faire sans le lab.

Donnez une clé inventée et l'adresse du lab

Commande
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=us-east-1 AWS_ENDPOINT_URL=http://cloud:4566

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créez une table

Commande
aws dynamodb create-table --table-name Orders --attribute-definitions AttributeName=customer,AttributeType=S AttributeName=order,AttributeType=S --key-schema AttributeName=customer,KeyType=HASH AttributeName=order,KeyType=RANGE --billing-mode PAY_PER_REQUEST --query TableDescription.TableStatus

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ajoutez un élément

Commande
aws dynamodb put-item --table-name Orders --item '{"customer":{"S":"ada"},"order":{"S":"1001"},"total":{"N":"12"}}'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lisez l'élément

Commande
aws dynamodb get-item --table-name Orders --key '{"customer":{"S":"ada"},"order":{"S":"1001"}}'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lisez un élément qui n'existe pas

Commande
aws dynamodb get-item --table-name Orders --key '{"customer":{"S":"ada"},"order":{"S":"9999"}}'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À propos de ce labo et de sa source: Lab Cloud : s’exercer avec des buckets S3, des files SQS et des tables DynamoDB en ligne de commande AWS

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.