Guia Completo do TinyDB: Banco de Dados NoSQL Leve para Python
Introdução
Aplicações modernas nem sempre precisam de sistemas de banco de dados complexos e pesados. Em projetos que não exigem alta escalabilidade ou processamento de grandes volumes de dados, um banco de dados leve e embutido é mais que suficiente. O TinyDB – um banco de dados NoSQL escrito inteiramente em Python – oferece uma solução prática e simples para armazenar dados estruturados sem usar SQL.
O TinyDB salva os dados em formato JSON e não requer a instalação de um servidor. Isso o torna ideal para scripts, ferramentas de linha de comando (CLI), aplicações desktop, protótipos e projetos educacionais. A biblioteca tem apenas alguns quilobytes e dependências mínimas, sendo uma excelente escolha para soluções leves.
Instalação e Configuração Básica
Instalando o TinyDB
Você pode instalar o TinyDB com um único comando via pip:
pip install tinydb
Para funcionalidades extras, existem extensões disponíveis:
pip install tinydb[compression] # Para compressão de dados
pip install tinydb[yaml] # Para trabalhar com YAML
Criando um Banco de Dados
Criando um banco com salvamento em arquivo:
from tinydb import TinyDB
db = TinyDB('db.json') # O arquivo será criado automaticamente
Criando um banco em memória:
from tinydb.storages import MemoryStorage
db = TinyDB(storage=MemoryStorage)
Configurando Codificação e Parâmetros
from tinydb import TinyDB
from tinydb.storages import JSONStorage
# Configurando codificação
db = TinyDB('db.json', encoding='utf-8')
# Configurando indentação JSON para legibilidade
db = TinyDB('db.json', indent=4, separators=(',', ': '))
Fundamentos da Estrutura de Dados do TinyDB
O TinyDB utiliza um modelo de dados orientado a documentos:
- Os dados são armazenados como uma lista de documentos (dicionários Python)
- Cada documento possui um
doc_idúnico, gerado automaticamente - Tipos suportados: strings, números, listas, dicionários, valores booleanos e null
- Documentos podem ter estruturas diferentes dentro de uma mesma tabela
- Suporte a aninhamento de dados em qualquer profundidade
Operações Principais com Dados
Inserindo Dados
Inserindo um único documento:
from tinydb import TinyDB
db = TinyDB('db.json')
# Inserção simples
db.insert({'name': 'João', 'age': 30, 'city': 'São Paulo'})
# Inserção obtendo o ID
doc_id = db.insert({'name': 'Ana', 'age': 25})
print(f"Documento adicionado com ID: {doc_id}")
Inserção múltipla:
usuarios = [
{'name': 'Ana', 'age': 25, 'profession': 'Designer'},
{'name': 'Pedro', 'age': 40, 'profession': 'Programador'},
{'name': 'Maria', 'age': 28, 'profession': 'Gerente'}
]
doc_ids = db.insert_multiple(usuarios)
print(f"Documentos adicionados: {len(doc_ids)}")
Lendo Dados
Obtendo todos os documentos:
todos_usuarios = db.all()
print(f"Total de usuários: {len(todos_usuarios)}")
Obtendo um documento por ID:
usuario = db.get(doc_id=1)
if usuario:
print(f"Usuário encontrado: {usuario['name']}")
Busca e Filtragem
Fundamentos da busca com Query:
from tinydb import Query
User = Query()
# Busca por correspondência exata
usuarios = db.search(User.name == 'João')
# Busca por condição
adultos = db.search(User.age >= 30)
# Obtendo a primeira correspondência
usuario = db.get(User.name == 'Ana')
Condições de busca complexas:
# Operador lógico E
jovens_designers = db.se