Gestion TinyDB pour stockage JSON

VérifiéSûr

Configurez et utilisez TinyDB pour le stockage de documents JSON. La compétence couvre la configuration, les opérations CRUD, la génération d'identifiants et les motifs de requête avancés. Elle est utile lors de la création d'applications nécessitant une persistance JSON légère avec des capacités de recherche.

Spar Skills Guide Bot
DeveloppementIntermédiaire
23002/06/2026
Claude Code
#tinydb#json-database#python#database-management

Recommandé pour

Notre avis

Configure et exploite TinyDB pour le stockage de documents JSON, offrant la configuration, les opérations CRUD et les modèles de requêtes.

Points forts

  • Léger et simple à configurer avec un minimum d'effort
  • Prend en charge les requêtes complexes avec opérateurs logiques et fonctions de test
  • Inclut un middleware de cache pour améliorer les performances
  • Fournit une interface CRUD complète pour la gestion des documents

Limites

  • Inadapté aux bases de données multi-utilisateurs ou à grande échelle
  • Les fichiers JSON peuvent devenir lents avec un grand nombre d'enregistrements
  • Pas de support intégré pour les relations ou les index
Quand l'utiliser

Lorsque vous avez besoin d'une base de données NoSQL simple et basée sur des fichiers pour le prototypage, les petites applications ou la persistance locale des données.

Quand l'éviter

Lorsque vous exigez une haute concurrence, des requêtes relationnelles complexes, ou devez traiter efficacement de grands ensembles de données.

Analyse de sécurité

Sûr
Score qualité92/100

The skill provides a Python wrapper for TinyDB, a local document database. It performs no destructive actions, exfiltration, or execution of external commands beyond file I/O. Bash is allowed-tools but not invoked in the skill content.

Aucun point d'attention détecté

Exemples

Set up TinyDB database with caching
Set up a TinyDB database for a todo application with caching middleware and a table for tasks.
Query high priority tasks
Write a query to find all tasks with a priority of 'high' that are not completed.
Implement CRUD operations
Create a Python class that provides insert, get, update, and delete operations for a TinyDB document store.

name: database-skill description: Configure and operate TinyDB for JSON-based document storage. Use when setting up databases, creating queries, or managing data persistence. allowed-tools: Write, Read, Bash

Database Skill

Purpose

Set up and manage TinyDB document database with proper configuration and query patterns.

Instructions

Database Setup

from tinydb import TinyDB, Query
from tinydb.storages import JSONStorage
from tinydb.middlewares import CachingMiddleware
from pathlib import Path
from typing import Optional, List

class TodoDatabase:
    """TinyDB wrapper for todo task storage."""
    
    def __init__(self, db_path: str = "todo_data.json"):
        """Initialize database with caching."""
        self.db_path = Path(db_path)
        self.db = TinyDB(
            self.db_path,
            storage=CachingMiddleware(JSONStorage),
            indent=2,
            ensure_ascii=False
        )
        self.tasks = self.db.table('tasks')
        self.query = Query()
    
    def close(self):
        """Close database connection."""
        self.db.close()
    
    def __enter__(self):
        return self
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.close()

ID Generation

def get_next_id(self) -> int:
    """Generate next unique ID."""
    all_tasks = self.tasks.all()
    if not all_tasks:
        return 1
    return max(task['id'] for task in all_tasks) + 1

CRUD Operations

def insert(self, task: dict) -> int:
    """Insert a new task."""
    task['id'] = self.get_next_id()
    doc_id = self.tasks.insert(task)
    return task['id']

def get(self, task_id: int) -> Optional[dict]:
    """Get task by ID."""
    return self.tasks.get(self.query.id == task_id)

def get_all(self) -> List[dict]:
    """Get all tasks."""
    return self.tasks.all()

def update(self, task_id: int, updates: dict) -> bool:
    """Update task by ID."""
    result = self.tasks.update(updates, self.query.id == task_id)
    return len(result) > 0

def delete(self, task_id: int) -> bool:
    """Delete task by ID."""
    result = self.tasks.remove(self.query.id == task_id)
    return len(result) > 0

Query Patterns

# Simple equality
tasks = db.tasks.search(db.query.priority == 'high')

# Logical AND
tasks = db.tasks.search(
    (db.query.priority == 'high') & 
    (db.query.status == 'pending')
)

# Logical OR
tasks = db.tasks.search(
    (db.query.priority == 'high') | 
    (db.query.priority == 'urgent')
)

# NOT
tasks = db.tasks.search(~(db.query.status == 'completed'))

# Test function (for complex conditions)
tasks = db.tasks.search(
    db.query.title.test(lambda t: 'keyword' in t.lower())
)

# Check if value in list
tasks = db.tasks.search(
    db.query.tags.test(lambda tags: 'work' in tags)
)

# Exists check
tasks = db.tasks.search(db.query.due_date.exists())

# Comparison operators
tasks = db.tasks.search(db.query.priority != 'low')

Full Database Class

class TodoDatabase:
    def __init__(self, db_path: str = "todo_data.json"):
        self.db = TinyDB(
            db_path,
            storage=CachingMiddleware(JSONStorage),
            indent=2
        )
        self.tasks = self.db.table('tasks')
        self.query = Query()
    
    def get_next_id(self) -> int:
        all_tasks = self.tasks.all()
        return max((t['id'] for t in all_tasks), default=0) + 1
    
    def insert(self, task: dict) -> int:
        task['id'] = self.get_next_id()
        self.tasks.insert(task)
        return task['id']
    
    def get(self, task_id: int) -> Optional[dict]:
        return self.tasks.get(self.query.id == task_id)
    
    def get_all(self) -> List[dict]:
        return self.tasks.all()
    
    def search(self, condition) -> List[dict]:
        return self.tasks.search(condition)
    
    def update(self, task_id: int, updates: dict) -> bool:
        return bool(self.tasks.update(updates, self.query.id == task_id))
    
    def delete(self, task_id: int) -> bool:
        return bool(self.tasks.remove(self.query.id == task_id))
    
    def clear(self):
        self.tasks.truncate()
    
    def close(self):
        self.db.close()

Best Practices

  • Use CachingMiddleware for better performance
  • Always handle database closing properly
  • Use context managers for automatic cleanup
  • Generate IDs automatically
  • Use Query objects for type-safe queries
  • Index frequently queried fields conceptually
Skills similaires