Gestion de base de données TinyDB

VérifiéSûr

Configurez et gérez TinyDB pour le stockage de documents JSON. Maîtrisez les opérations CRUD, les requêtes et la persistance des données.

Spar Skills Guide Bot
DeveloppementIntermédiaire
3002/06/2026
Claude Code
#database#tinydb#json-storage#query#python

Recommandé pour

Notre avis

Configure et utilise TinyDB, une base de données orientée documents JSON, avec des opérations CRUD et des motifs de requête avancés.

Points forts

  • Implémentation complète d'un wrapper TinyDB avec gestion des IDs et mise en cache.
  • Support des requêtes simples et complexes (AND, OR, NOT, test, existence).
  • Code structuré en classe avec gestion de contexte pour une utilisation propre.

Limites

  • Nécessite Python et l'installation de la bibliothèque TinyDB.
  • Non adapté à des volumes de données très importants ou à des accès concurrents.
  • La persistance repose sur un fichier JSON, sans fonctionnalités avancées comme les index.
Quand l'utiliser

Quand vous avez besoin d'un stockage local simple basé sur des documents JSON avec des capacités de requêtage.

Quand l'éviter

Pour des applications nécessitant une base de données relationnelle, multi-utilisateurs ou à haute performance.

Analyse de sécurité

Sûr
Score qualité85/100

The skill uses only local file storage with TinyDB and standard Python libraries. No destructive commands, network calls, or data exfiltration are performed. Bash is allowed but not used in the instructions.

Aucun point d'attention détecté

Exemples

Initialize a TinyDB database
Set up a TinyDB database for storing todo items with caching, auto-increment IDs, and basic CRUD operations.
Query tasks with conditions
Search for all high-priority pending tasks using TinyDB with a logical AND condition.
Update a task by ID
Update the status of a task with ID 5 to 'completed' using TinyDB.

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