TinyDB – NoSQL база данных

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

Современные приложения не всегда нуждаются в мощных и сложных СУБД. В случаях, когда проект не требует масштабируемости или высокой скорости обработки большого объёма данных, достаточно лёгкой и встроенной базы. TinyDB – NoSQL база данных, полностью написанная на Python, представляет собой удобное и простое решение для хранения структурированных данных без SQL.

TinyDB сохраняет данные в формате JSON и не требует установки сервера. Это делает её идеальной для скриптов, небольших CLI-инструментов, десктопных приложений и образовательных проектов.

Установка и базовая настройка

Установить TinyDB можно одной строкой:

bash
pip install tinydb

Создание базы:

python
from tinydb import TinyDB db = TinyDB('db.json') # Файл будет создан автоматически

Создание in-memory базы:

python
from tinydb.storages import MemoryStorage db = TinyDB(storage=MemoryStorage)

Основы структуры данных TinyDB

  • TinyDB хранит данные в виде списка документов (словари)

  • Каждый документ имеет уникальный doc_id

  • Поддерживаются типы: строки, числа, списки, словари, булевы значения и null

Добавление, обновление, удаление данных

Вставка

python
db.insert({'name': 'Иван', 'age': 30})

Множественная вставка:

python
db.insert_multiple([ {'name': 'Анна', 'age': 25}, {'name': 'Пётр', 'age': 40} ])

Обновление

python
from tinydb import Query User = Query() db.update({'age': 31}, User.name == 'Иван')

Удаление

python
db.remove(User.name == 'Пётр')

Фильтрация и поиск документов

Поиск по значению:

python
user = db.search(User.age >= 30)

Комбинированные условия:

python
user = db.search((User.name == 'Анна') & (User.age < 30))

Работа с несколькими таблицами

TinyDB поддерживает несколько таблиц в одном файле:

python
logs = db.table('logs') logs.insert({'event': 'login', 'success': True})

Хранение в памяти и на диске

TinyDB по умолчанию сохраняет данные в db.json. Для временных или тестовых данных используйте:

python
TinyDB(storage=MemoryStorage)

Можно использовать собственные классы хранения, если нужно сохранить данные, например, в SQLite или Redis.

Расширенные возможности TinyDB

  • Поддержка middleware (например, CachingMiddleware)

  • Создание пользовательских индексов

  • Поддержка сериализации и кастомных объектов через hook-методы

python
from tinydb.middlewares import CachingMiddleware from tinydb.storages import JSONStorage db = TinyDB('db.json', storage=CachingMiddleware(JSONStorage))

Интеграция с Python-приложениями

TinyDB легко интегрируется в:

  • CLI-утилиты (как лёгкая база настроек)

  • Flask-приложения (как кэш или временное хранилище)

  • FastAPI (например, в background-тасках)

Пример с Flask:

python
from flask import Flask, jsonify from tinydb import TinyDB, Query app = Flask(__name__) db = TinyDB('db.json') @app.route('/users') def get_users(): return jsonify(db.all())

TinyDB vs другие NoSQL решения

СУБД Тип хранения Установка сервера Поддержка запросов Подходит для
TinyDB JSON-файл Нет Да Лёгкие приложения, CLI
MongoDB Документная Да Да Веб-приложения, API
Redis В памяти Да Ограниченно Кэш, сессии, очереди
SQLite Реляционная Нет SQL Локальные БД, отчёты

Ограничения и лучшие практики

  • Не рекомендуется для больших объёмов данных (медленно при 10k+ записей)

  • Не поддерживает сложные агрегаты или JOIN

  • Файл JSON может быть повреждён при внезапном завершении работы

  • Следует использовать close() при завершении работы

Тестирование с TinyDB

Подходит идеально:

python
test_db = TinyDB(storage=MemoryStorage) test_db.insert({'test': True})

Удаление всех данных:

python
db.truncate()

Часто задаваемые вопросы (FAQ)

1. Что такое TinyDB?
Это лёгкая NoSQL база данных на Python, сохраняющая данные в JSON.

2. Подходит ли TinyDB для продакшн?
Только для небольших задач, конфигураций или временных хранилищ.

3. Как фильтровать записи в TinyDB?
С помощью Query() и логических операторов (&, |, ~).

4. Можно ли использовать TinyDB без записи на диск?
Да, с MemoryStorage.

5. Есть ли поддержка транзакций?
Нет, только атомарные операции записи.

6. Поддерживает ли TinyDB вложенные структуры?
Да, поиск возможен с помощью вложенных ключей (User.profile.name).

Полный справочник по работе с TinyDB — лёгкой JSON-базой данных для Python

Установка

bash
pip install tinydb

Подключение к базе

python
from tinydb import TinyDB db = TinyDB('db.json') # создастся автоматически

Вы можете также использовать в памяти (без файла):

python
from tinydb.storages import MemoryStorage db = TinyDB(storage=MemoryStorage)

Работа с таблицами

python
users = db.table('users') # или db.default_table_name = 'users'

Вставка данных

Метод Описание
insert(doc) Вставка одного документа.
insert_multiple([docs]) Вставка нескольких документов.
python
users.insert({'name': 'Alice', 'age': 30}) users.insert_multiple([ {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35} ])

Чтение данных

python
users.all() # Все документы

Поиск с помощью Query:

python
from tinydb import Query User = Query() results = users.search(User.age > 30) one_user = users.get(User.name == 'Alice')

Обновление данных

python
users.update({'age': 31}, User.name == 'Alice')

Использование функции:

python
users.update(lambda doc: {'age': doc['age'] + 1}, User.age < 30)

Удаление данных

python
users.remove(User.age > 40)

Удаление всех данных:

python
users.truncate()

Поддержка вложенных данных

TinyDB поддерживает словари и списки:

python
db.insert({'name': 'Anna', 'address': {'city': 'Paris', 'zip': 75000}})

Поиск по вложенным полям:

python
User = Query() db.search(User.address.city == 'Paris')

Проверка наличия документа

python
exists = users.contains(User.name == 'Bob')

Получение по doc_id

python
doc = users.get(doc_id=3) users.update({'name': 'Updated'}, doc_ids=[3]) users.remove(doc_ids=[3])

Работа с несколькими таблицами

python
books = db.table('books') books.insert({'title': '1984', 'author': 'Orwell'})

Кастомное хранилище (например, с шифрованием)

python
from tinydb.storages import JSONStorage from tinydb.middlewares import CachingMiddleware db = TinyDB('secure.json', storage=CachingMiddleware(JSONStorage))

Пример: мини-база пользователей

python
from tinydb import TinyDB, Query db = TinyDB('users.json') User = Query() # Добавление db.insert({'name': 'Ivan', 'email': 'ivan@example.com'}) # Поиск print(db.search(User.name == 'Ivan')) # Обновление db.update({'email': 'new@example.com'}, User.name == 'Ivan') # Удаление db.remove(User.name == 'Ivan')

Когда использовать TinyDB

  • Для маленьких локальных приложений и офлайн-хранилищ.

  • При разработке CLI-утилит, конфигураций, данных для тестов.

  • Когда не нужен полноценный сервер БД.

  • Когда важна простота и читаемость данных (JSON-файл).

Заключение

TinyDB – NoSQL база данных — идеальный инструмент для простых проектов, прототипов и утилит, где не требуется мощная и тяжёлая СУБД. Она сочетает удобство, понятный API и полную интеграцию с Python-кодом, позволяя разработчикам быстро сохранять, искать и обновлять данные без лишней сложности.