Mon premier carnet de contacts¶
Prologue : Une découverte inattendue¶
C'était un mardi matin comme les autres. Alex, développeur Python depuis trois ans, sirotait son café en fixant son écran. La tâche semblait simple : créer un carnet de contacts pour l'équipe. Rien de bien compliqué, mais sortir l'artillerie lourde paraissait excessif. Pas de PostgreSQL, ni de SQLite. Juste quelque chose de léger et d'élégant.
C'est alors qu'Alex découvrit DictDB.
Chapitre 1 : Premiers pas¶
Alex ouvrit son terminal et installa le paquet :
Puis, mêlant curiosité et excitation, il écrivit ses premières lignes de code :
from dictdb import DictDB
# Créer une nouvelle base de données
db = DictDB()
# Créer une table pour les contacts
db.create_table("contacts")
# Récupérer une référence vers la table
contacts = db.get_table("contacts")
print("Base de données créée avec succès !")
print(f"Tables disponibles : {db.list_tables()}")
« C'est tout ? » pensa Alex. « C'est vraiment aussi simple que ça ? »
Chapitre 2 : Ajouter des contacts¶
Alex commença à remplir le carnet avec les membres de l'équipe :
# Ajouter le premier contact
contacts.insert({
"last_name": "Dupont",
"first_name": "Jean",
"email": "jean.dupont@entreprise.com",
"phone": "01-23-45-67-89"
})
# Ajouter d'autres contacts
contacts.insert({
"last_name": "Martin",
"first_name": "Sophie",
"email": "sophie.martin@entreprise.com",
"phone": "01-98-76-54-32"
})
contacts.insert({
"last_name": "Bernard",
"first_name": "Pierre",
"email": "pierre.bernard@entreprise.com",
"phone": "01-11-22-33-44"
})
contacts.insert({
"last_name": "Dubois",
"first_name": "Claire",
"email": "claire.dubois@entreprise.com",
"phone": "01-55-66-77-88"
})
print(f"Nombre de contacts : {contacts.count()}")
Alex remarqua que chaque méthode insert renvoyait un identifiant unique. DictDB générait automatiquement une clé primaire id pour chaque enregistrement.
Chapitre 3 : Retrouver des contacts¶
Le carnet se remplissait, mais à quoi bon stocker des données si on ne peut pas les retrouver ?
# Afficher tous les contacts
all_contacts = contacts.select()
print("=== Tous mes contacts ===")
for contact in all_contacts:
print(f"{contact['first_name']} {contact['last_name']} - {contact['email']}")
=== Tous mes contacts ===
Jean Dupont - jean.dupont@entreprise.com
Sophie Martin - sophie.martin@entreprise.com
Pierre Bernard - pierre.bernard@entreprise.com
Claire Dubois - claire.dubois@entreprise.com
Alex voulait rechercher un contact spécifique. La puissance du DSL de requêtes devint alors évidente :
from dictdb import Condition
# Trouver Sophie
sophie = contacts.select(where=Condition(contacts.first_name == "Sophie"))
print(f"Contact trouvé : {sophie[0]['first_name']} {sophie[0]['last_name']}")
# Trouver tous les contacts dont le nom commence par 'B'
contacts_b = contacts.select(where=contacts.last_name.startswith("B"))
print("\nContacts dont le nom commence par B :")
for c in contacts_b:
print(f" - {c['first_name']} {c['last_name']}")
Condition est facultatif
Vous pouvez passer l'expression directement au paramètre where sans l'envelopper dans Condition(). Les deux syntaxes fonctionnent !
Chapitre 4 : Mettre à jour un contact¶
Un jour, Pierre Bernard changea de numéro de téléphone. Alex dut mettre à jour le carnet :
# Mettre à jour le numéro de téléphone de Pierre
modified_count = contacts.update(
{"phone": "01-99-88-77-66"},
where=Condition(contacts.first_name == "Pierre")
)
print(f"Nombre de contacts modifiés : {modified_count}")
# Vérifier la modification
pierre = contacts.select(where=contacts.first_name == "Pierre")[0]
print(f"Nouveau numéro de Pierre : {pierre['phone']}")
Chapitre 5 : Supprimer un contact¶
Malheureusement, Jean Dupont quitta l'entreprise. Alex dut le retirer du carnet :
# Retirer Jean du carnet
deleted_count = contacts.delete(where=Condition(contacts.first_name == "Jean"))
print(f"Nombre de contacts supprimés : {deleted_count}")
print(f"Contacts restants : {contacts.count()}")
Chapitre 6 : Sauvegarder son travail¶
Alex réalisa qu'il serait dommage de perdre tout ce travail. DictDB permettait de sauvegarder les données dans un fichier JSON :
# Sauvegarder la base de données
db.save("contact_book.json", file_format="json")
print("Base de données sauvegardée !")
Le fichier JSON généré était parfaitement lisible :
{
"tables": {
"contacts": {
"primary_key": "id",
"schema": null,
"records": [
{
"id": 2,
"last_name": "Martin",
"first_name": "Sophie",
"email": "sophie.martin@entreprise.com",
"phone": "01-98-76-54-32"
},
...
]
}
}
}
Chapitre 7 : Reprendre là où on s'était arrêté¶
Le lendemain matin, Alex reprit le travail. Charger la base de données fut un jeu d'enfant :
from dictdb import DictDB
# Charger la base de données sauvegardée
db = DictDB.load("contact_book.json", file_format="json")
# Récupérer la table des contacts
contacts = db.get_table("contacts")
print(f"Base chargée ! {contacts.count()} contacts trouvés.")
# Vérifier que tout est là
for contact in contacts.select():
print(f" - {contact['first_name']} {contact['last_name']}")
Épilogue : Un carnet de contacts complet¶
Alex était satisfait. En seulement quelques lignes de code, un carnet de contacts entièrement fonctionnel avait vu le jour. Voici le script complet partagé avec l'équipe :
from dictdb import DictDB, Condition
def main():
# Créer ou charger la base de données
try:
db = DictDB.load("contact_book.json", file_format="json")
print("Carnet de contacts chargé !")
except FileNotFoundError:
db = DictDB()
db.create_table("contacts")
print("Nouveau carnet de contacts créé !")
contacts = db.get_table("contacts")
# Ajouter un nouveau contact
new_id = contacts.insert({
"last_name": "Leroy",
"first_name": "Emma",
"email": "emma.leroy@entreprise.com",
"phone": "01-00-11-22-33"
})
print(f"Contact ajouté avec l'id {new_id}")
# Afficher tous les contacts
print("\n=== Carnet de Contacts ===")
for contact in contacts.select(order_by="last_name"):
print(f"{contact['first_name']} {contact['last_name']}")
print(f" Email : {contact['email']}")
print(f" Tél : {contact['phone']}")
print()
# Sauvegarder
db.save("contact_book.json", file_format="json")
print("Carnet de contacts sauvegardé !")
if __name__ == "__main__":
main()
Ce que nous avons appris¶
Dans ce tutoriel, nous avons découvert les bases de DictDB :
| Concept | Code |
|---|---|
| Créer une base de données | db = DictDB() |
| Créer une table | db.create_table("name") |
| Récupérer une table | table = db.get_table("name") |
| Insérer un enregistrement | table.insert({...}) |
| Sélectionner des enregistrements | table.select() |
| Filtrer avec une condition | table.select(where=table.field == value) |
| Mettre à jour des enregistrements | table.update({...}, where=...) |
| Supprimer des enregistrements | table.delete(where=...) |
| Sauvegarder en JSON | db.save("file.json", file_format="json") |
| Charger depuis JSON | DictDB.load("file.json", file_format="json") |
Prochaines étapes¶
Alex était prêt pour de nouveaux défis. Dans le prochain chapitre, découvrez comment gérer plusieurs tables liées entre elles, utiliser des requêtes plus avancées et optimiser les recherches.