LiteJsonDb : Le guide ultime pour devenir un ninja des bases de données JSON

Salut les geeks ! Aujourd'hui, on va plonger dans les entrailles de LiteJsonDb, cette petite merveille qui va révolutionner la façon dont vous gérez vos données. Préparez-vous à un voyage épique dans le monde des bases de données JSON, version turbo. C'est parti !

1. LiteJsonDb, kesako ?

Imaginez un monde où vous pouvez stocker vos données aussi facilement que vous écrivez un tweet, mais avec la puissance d'une vraie base de données. C'est ça, LiteJsonDb. C'est comme si JSON et une base de données NoSQL avaient eu un enfant prodige.

LiteJsonDb, c'est :

  • Léger comme une plume (votre disque dur va vous remercier)
  • Rapide comme Usain Bolt sous cocaïne
  • Flexible comme un yogi après 20 ans de pratique
  • Sécurisé comme le coffre-fort de la Banque de France (si vous activez le chiffrement, bien sûr)

En gros, c'est la solution parfaite pour tous ceux qui en ont marre de se prendre la tête avec des bases de données compliquées, mais qui veulent quand même avoir l'air cool devant leurs potes développeurs.

2. Installation : plus facile que de commander une pizza

Avant de vous lancer dans l'aventure LiteJsonDb, il faut l'installer. Et croyez-moi, c'est plus simple que de monter un meuble IKEA :

pip install LiteJsonDb

Voilà, c'est tout. Pas de vis manquante, pas de notice incompréhensible en suédois. Juste une ligne de commande et vous êtes prêt à conquérir le monde des données.

3. Les bases : CRUD, mais en plus sexy

Okay, maintenant qu'on a notre joujou installé, voyons voir comment on s'en sert. On va commencer par les opérations de base, le fameux CRUD (Create, Read, Update, Delete). Mais version LiteJsonDb, c'est comme le CRUD habituel, mais avec un costard Armani.

Création de la base de données

D'abord, on crée notre base de données. C'est comme ouvrir un nouveau document Word, mais en mille fois plus cool :


import LiteJsonDb

# On crée notre base de données, option chiffrement activée parce qu'on est pas des sauvages
db = LiteJsonDb.JsonDB(crypted=True)
    

Boom ! Vous avez maintenant une base de données chiffrée. Les hackers peuvent aller se rhabiller.

Ajout de données (Create)

Maintenant, on va ajouter des données. C'est comme remplir son frigo, mais version geek :


# On ajoute un utilisateur
db.set_data("users/1", {"name": "Aliou", "skill": "Hacker la matrice", "coolness": 9000})

# On ajoute un autre utilisateur, parce qu'on est généreux
db.set_data("users/2", {"name": "Trinity", "skill": "Kung-fu virtuel", "coolness": 9001})
    

Vous voyez comme c'est simple ? Pas besoin de se prendre la tête avec des requêtes SQL alambiquées. On balance nos données comme si on jetait des confettis à un mariage de geeks.

Lecture des données (Read)

Maintenant, si on veut récupérer nos données, c'est aussi simple que de demander l'heure à sa montre connectée :


# On récupère les infos de Aliou
Aliou_data = db.get_data("users/1")
print(f"Nom : {Aliou_data['name']}, Compétence : {Aliou_data['skill']}, Coolitude : {Aliou_data['coolness']}")

# On récupère toute la base de données, pour le fun
all_data = db.get_db(raw=True)
print("Toute la base de données :")
print(all_data)
    

Et voilà ! Vos données sont là, prêtes à être utilisées. C'est comme avoir un mini-Google dans votre ordinateur, mais sans la partie flippante sur la vie privée.

Mise à jour des données (Update)

Parfois, il faut mettre à jour les données. Peut-être que Aliou a appris une nouvelle compétence, ou que sa coolitude a encore augmenté (si c'est possible) :


# On met à jour les infos de Aliou
db.edit_data("users/1", {"skill": "Hacker la matrice ET faire du café en même temps", "coolness": 9999})

# On vérifie que c'est bien mis à jour
updated_Aliou = db.get_data("users/1")
print(f"Aliou mis à jour : {updated_Aliou}")
    

C'est tout ! Pas besoin de sortir la grosse artillerie SQL pour une simple mise à jour. LiteJsonDb s'occupe de tout en coulisses, comme un majordome discret mais efficace.

Suppression de données (Delete)

Et si on veut supprimer des données ? Aussi simple que de faire disparaître les preuves après une soirée trop arrosée :


# Désolé Trinity, mais tu dois partir
db.remove_data("users/2")

# On vérifie qu'elle est bien partie
if db.get_data("users/2") is None:
    print("Trinity a quitté la matrice")
else:
    print("Houston, on a un problème")
    

Et voilà, Trinity a disparu de notre base de données. Pas de traces, pas de miettes, juste un souvenir dans notre mémoire (et peut-être dans nos backups, parce qu'on n'est jamais trop prudent).

4. Les sous-collections : l'inception des données

Maintenant, parlons des sous-collections. C'est comme avoir des dossiers dans vos dossiers, mais en version base de données. C'est l'inception des données, et c'est super pratique quand vous voulez organiser vos infos comme un boss.


# On crée une sous-collection pour nos projets top secrets
db.set_subcollection("projects", "matrix_reloaded", {"status": "En cours", "budget": "Infini"})

# On ajoute des détails à notre projet
db.edit_subcollection("projects", "matrix_reloaded", {"description": "Faire une suite encore plus cool"})

# On jette un œil à notre chef-d'œuvre
matrix_project = db.get_subcollection("projects")
print(f"Projet en cours : {matrix_project}")

# Finalement, on abandonne le projet (ne le dites à personne)
db.remove_subcollection("projects", "matrix_reloaded")
    

Avec les sous-collections, vous pouvez organiser vos données comme un architecte de l'information. C'est comme avoir un système de classement digne de la CIA, mais sans les costards noirs et les lunettes de soleil.

5. Les fonctions utilitaires : votre couteau suisse numérique

LiteJsonDb ne serait pas aussi cool sans ses fonctions utilitaires. C'est comme avoir une boîte à outils magique qui résout tous vos problèmes de données. Voyons ces petites merveilles en détail :

a) Conversion de dates

Parce que jongler avec les formats de date, c'est comme essayer de résoudre un Rubik's Cube les yeux fermés :


date_string = "2023-08-04"
converted_date = db.convert_to_datetime(date_string)
print(f"Date convertie : {converted_date}")
print(f"Type de la date convertie : {type(converted_date)}")
    

Maintenant, vous pouvez manipuler vos dates comme un pro, sans vous arracher les cheveux sur les fuseaux horaires et autres joyeusetés.

b) Valeurs par défaut

Pour les jours où vos données sont aussi vides que le frigo d'un étudiant fauché :


user_data = {"name": "Neo"}
age = db.get_or_default(user_data, "age", 30)
print(f"Âge de Neo : {age}")  # Affichera 30 si 'age' n'existe pas dans user_data
    

C'est comme avoir un filet de sécurité pour vos données. Plus besoin de vérifier 15 fois si une clé existe avant de l'utiliser.

c) Ajout de clés

Pour les moments où vous réalisez que vous avez oublié quelque chose d'important :


user_data = {"name": "Morpheus"}
db.key_exists_or_add(user_data, "role", "Capitaine du Nebuchadnezzar")
print(f"Données mises à jour : {user_data}")
    

C'est comme avoir un assistant qui complète vos phrases avant même que vous ne réalisiez que vous avez oublié quelque chose.

d) Aplatir le JSON

Pour quand votre JSON ressemble plus à un labyrinthe qu'à des données structurées :


complex_data = {
    "name": "Agent Smith",
    "attributes": {
        "skills": ["Duplication", "Combat"],
        "appearance": {
            "suit": "Black",
            "sunglasses": True
        }
    }
}
flat_data = db.flatten_json(complex_data)
print("Données aplaties :")
db.pretty_print(flat_data)
    

C'est comme passer votre JSON au rouleau compresseur. Tout devient plat, facile à parcourir, parfait pour quand vous voulez une vue d'ensemble sans vous perdre dans les profondeurs de vos données.

e) Normalisation des clés

Parce que la cohérence, c'est la clé d'une base de données heureuse :


messy_data = {
    "UserName": "neo",
    "Last Login": "2023-08-04",
    "is_ACTIVE": True
}
clean_data = db.normalize_keys(messy_data)
print("Données normalisées :")
db.pretty_print(clean_data)
    

Avec ça, vos clés seront aussi propres et ordonnées que le code source de la Matrice. Plus de mélange entre camelCase, snake_case et autres joyeusetés stylistiques.

f) Filtrage et tri

Pour quand vous voulez jouer au petit chimiste avec vos données :


users = [
    {"name": "Neo", "age": 35},
    {"name": "Trinity", "age": 30},
    {"name": "Morpheus", "age": 40},
    {"name": "Agent Smith", "age": 100}
]

# Filtrage : seulement les humains (désolé, Agent Smith)
humans = db.filter_data(users, lambda u: u["age"] < 50)
print("Humains filtrés :")
db.pretty_print(humans)

# Tri : du plus jeune au plus âgé
sorted_users = db.sort_data(users, lambda u: u["age"])
print("Utilisateurs triés par âge :")
db.pretty_print(sorted_users)
    

Avec ces fonctions, vous pouvez manipuler vos données comme un DJ mixe ses tracks. Filtrez, triez, réarrangez, tout est possible !

g) Hachage de mots de passe

Parce que "123456" n'est pas un mot de passe, c'est une invitation aux problèmes :


password = "ILoveTheMatrix123"
hashed_password = db.hash_password(password)
print(f"Mot de passe haché : {hashed_password}")

# Vérification du mot de passe
is_correct = db.check_password(hashed_password, "ILoveTheMatrix123")
print(f"Le mot de passe est correct : {is_correct}")
    

Avec ça, les mots de passe de vos utilisateurs seront aussi sécurisés que le coffre-fort de la Banque Centrale de Zion.

h) Nettoyage des données

Pour se débarrasser des vilains scripts et autres joyeusetés malveillantes :


dirty_data = {
    "name": "Cypher",
    "message": "<script>alert('Je veux retourner dans la Matrice!');</script>"
}
clean_data = db.sanitize_output(dirty_data)
print("Données nettoyées :")
db.pretty_print(clean_data)
    

C'est comme avoir un agent de sécurité pour vos données. Plus de risque que des scripts malveillants se glissent dans votre application.

6. Les pièges à éviter : parce que même Neo fait des erreurs

Maintenant qu'on a vu toutes ces fonctionnalités cool, parlons un peu des pièges à éviter. Parce que même les meilleurs se plantent parfois :

  • Oublier de chiffrer : C'est comme laisser les clés sur la porte de votre voiture en plein centre-ville. Utilisez toujours crypted=True quand vous initialisez votre base de données, sauf si vous voulez que votre chat puisse lire vos données confidentielles.
  • Négliger les sauvegardes : LiteJsonDb est génial, mais il n'est pas à l'abri d'un bug ou d'une suppression accidentelle. Faites des backups réguliers, comme si votre vie en dépendait (parce que votre job en dépend peut-être). LiteJsonDb posséde un systéme de sauvegarde locale mais prévoit une sauvegarde en ligne.
  • Abuser des sous-collections : C'est tentant de créer des sous-collections dans des sous-collections dans des sous-collections... Mais à un moment, ça devient le labyrinthe de l'inception. Gardez ça simple, votre "vous" du futur vous remerciera quand il devra maintenir le code.
  • Ignorer les utilitaires : LiteJsonDb vous offre plein d'outils cool, ne les laissez pas prendre la poussière ! C'est comme avoir une Ferrari et ne jamais dépasser les 50 km/h.

7. Astuces de pro : pour briller en société (de développeurs)

Voici quelques astuces supplémentaires pour utiliser LiteJsonDb comme un vrai pro :

a) Utilisation de clés composées

Vous pouvez utiliser des clés composées pour organiser vos données de manière plus structurée :


# Stockage d'informations sur un film
db.set_data("movies/the_matrix/characters/neo", {
    "name": "Neo",
    "actor": "Keanu Reeves",
    "skills": ["Kung-fu", "Bullet dodging"]
})

# Récupération facile
neo_data = db.get_data("movies/the_matrix/characters/neo")
print(f"Données de Neo : {neo_data}")
    

Cette approche vous permet de créer une structure hiérarchique dans vos données, un peu comme un système de fichiers.

b) Transactions basiques

LiteJsonDb ne supporte pas nativement les transactions, mais vous pouvez simuler un comportement similaire :


def update_user_and_log(user_id, new_data):
    try:
        # Mettre à jour l'utilisateur
        db.edit_data(f"users/{user_id}", new_data)
        # Ajouter un log
        db.set_data(f"logs/{user_id}/{db.convert_to_datetime(datetime.now().isoformat())}", {
            "action": "update",
            "data": new_data
        })
        print("Mise à jour et log réussis")
    except Exception as e:
        print(f"Erreur lors de la mise à jour : {e}")
        # Ici, vous pourriez ajouter une logique pour "annuler" les changements si nécessaire

update_user_and_log("1", {"last_login": "2023-08-05"})
    

Cette approche permet de regrouper plusieurs opérations et de les traiter comme une seule unité logique.

c) Utilisation de LiteJsonDb comme cache

Vous pouvez utiliser LiteJsonDb comme un système de cache rapide pour vos applications :


def get_user_data(user_id):
    # Vérifier d'abord dans le cache
    cached_data = db.get_data(f"cache/users/{user_id}")
    if cached_data:
        print("Données récupérées du cache")
        return cached_data
    
    # Si pas dans le cache, récupérer depuis la "vraie" base de données (simulée ici)
    print("Récupération des données depuis la base principale")
    user_data = {"name": "Neo", "age": 35}  # Simulé
    
    # Mettre en cache pour la prochaine fois
    db.set_data(f"cache/users/{user_id}", user_data)
    
    return user_data

# Utilisation
print(get_user_data("123"))  # Première fois : récupère depuis la "vraie" DB
print(get_user_data("123"))  # Deuxième fois : récupère depuis le cache
    

Cette technique peut grandement améliorer les performances de votre application en réduisant les accès à la base de données principale.

8. Conclusion : vous êtes maintenant un maître de LiteJsonDb

Voilà, les amis ! Vous avez maintenant toutes les cartes en main pour devenir un véritable ninja de LiteJsonDb. Avec ces connaissances, vous pouvez :

  • Créer des bases de données JSON légères et puissantes
  • Manipuler vos données comme un pro
  • Utiliser des fonctionnalités avancées pour booster vos projets
  • Éviter les pièges classiques et briller en société (de développeurs)

LiteJsonDb est une base de données locale conçue pour faciliter l'utilisation de JSON comme système de stockage. Bien que principalement destinée à de petits projets personnels, elle simplifie considérablement la manipulation native de JSON, qui peut s'avérer fastidieuse. Notre objectif était de rendre les choses plus simples et plus efficaces pour les développeurs. À l'avenir, nous prévoyons de lancer LiteJsonDb-Remote, qui offrira une solution de base de données en ligne. Nous sommes impatients de connaître votre avis sur cette future fonctionnalité ! N'oubliez pas : avec un grand pouvoir viennent de grandes responsabilités. Utilisez LiteJsonDb à bon escient, et n'hésitez pas à explorer davantage le » repo github. Qui sait, vous pourriez découvrir des utilisations de LiteJsonDb auxquelles même ses créateurs n'avaient pas pensé !

Maintenant, allez coder comme si vous étiez dans la Matrice. N'oubliez pas vos lunettes de soleil, et rappelez-vous : il n'y a pas de cuillère.

  • A+
  • A-