PickleDB – лёгкая база данных

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

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

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

Введение

В проектах, где не требуется полноценная реляционная база данных, но нужно надёжно сохранять небольшие объёмы данных, на помощь приходит PickleDB – лёгкая база данных. Эта библиотека написана на чистом Python, не требует отдельного сервера и хранит данные в формате JSON.

PickleDB идеально подходит для CLI-утилит, хранения конфигураций, пользовательских токенов, кэша, временных данных и микропроектов. Она сочетает простоту использования и достаточно богатый функционал для небольших задач.

Установка и подключение

Установить PickleDB можно с помощью pip:

bash
pip install pickledb

Создание базы и подключение:

python
import pickledb db = pickledb.load('data.db', auto_dump=True)

Параметр auto_dump=True означает, что база будет автоматически сохраняться после каждого изменения.

Принцип работы и структура хранения

  • Данные хранятся в формате JSON

  • База представляет собой ключ-значение хранилище

  • Поддерживает вложенные словари и списки

  • Все изменения сохраняются в файл, что делает базу постоянной

Пример структуры:

json
{ "user": {"name": "Анна", "age": 25}, "tokens": ["abc123", "xyz789"] }

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

Простое значение

python
db.set('username', 'ivan')

Вложенный словарь

python
db.set('user', {'name': 'Анна', 'age': 25})

Обновление значения

python
user = db.get('user') user['age'] = 26 db.set('user', user)

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

Получение значения

python
name = db.get('username') # 'ivan'

Проверка наличия ключа

python
db.exists('username') # True или False

Удаление ключа

python
db.rem('username')

Списки и структуры данных

PickleDB поддерживает списки через методы lcreate, ladd, lgetall, lpop, lrem:

python
db.lcreate('mylist') db.ladd('mylist', 'item1') db.ladd('mylist', 'item2') items = db.lgetall('mylist') # ['item1', 'item2']

Удаление элемента из списка:

python
db.lrem('mylist', 'item1')

Получение длины списка:

python
db.llen('mylist') # 1

Постоянное и временное хранение

  • auto_dump=True — данные сохраняются автоматически

  • Если auto_dump=False, нужно вручную вызвать db.dump()

Можно использовать временный файл или in-memory базу с помощью mock-файла:

python
db = pickledb.load(':memory:', False) # Только в рамках сессии

Сценарии использования PickleDB

  • Хранение пользовательских настроек

  • Временные токены доступа

  • Кэширование данных между вызовами функций

  • Простая БД для CLI-утилит

  • Логирование событий в JSON-формате

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

С Flask

python
from flask import Flask, request import pickledb app = Flask(__name__) db = pickledb.load('flask.db', True) @app.route('/user', methods=['POST']) def set_user(): data = request.json db.set('user', data) return {'status': 'ok'}

С FastAPI

python
from fastapi import FastAPI import pickledb app = FastAPI() db = pickledb.load('fastapi.db', True) @app.get('/user') def get_user(): return db.get('user')

Преимущества и ограничения PickleDB

Преимущества:

  • Простота и минимализм

  • Не требует установки СУБД

  • Формат JSON — читаемый и переносимый

  • Поддержка словарей, списков, вложенных структур

Ограничения:

  • Не предназначен для хранения больших объёмов данных

  • Нет индексов, фильтрации, транзакций

  • Все данные загружаются в память при старте

Сравнение с другими лёгкими СУБД

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

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

  • Используйте временные файлы или :memory: режим

  • Удаляйте ключи перед/после тестов:

python
db.rem('test_key')
  • Можно легко сериализовать/десериализовать тестовые данные

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

1. Что такое PickleDB?
Это лёгкая и простая база данных, основанная на JSON, реализованная на Python.

2. Поддерживает ли PickleDB списки?
Да, с помощью методов lcreate, ladd, lgetall.

3. Нужно ли сохранять данные вручную?
Только если auto_dump=False. Иначе всё сохраняется автоматически.

4. Подходит ли PickleDB для продакшна?
Только в небольших проектах, скриптах и вспомогательных задачах.

5. Что произойдёт при сбое записи?
Файл JSON может быть повреждён, рекомендуется использовать резервные копии.

6. Можно ли использовать PickleDB с Flask или FastAPI?
Да, он легко интегрируется как лёгкое хранилище.

Полный справочник по работе с PickleDB — лёгкой key-value БД на Python

Установка

bash
pip install pickledb

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

python
import pickledb db = pickledb.load('data.db', auto_dump=True)
Параметр Назначение
'data.db' Путь к JSON-файлу.
auto_dump=True Автоматически сохранять изменения.

Основные операции

Установка значений

python
db.set('name', 'Alice') db.set('count', 1)

Получение значений

python
db.get('name') # → 'Alice' db.get('count') # → 1

Удаление ключей

python
db.rem('name')

Работа с булевыми значениями

python
db.set('active', True) db.get('active') # → True

Проверка наличия ключа

python
db.exists('name') # → True / False

Получение всех ключей и значений

python
db.getall() # → ['name', 'count', ...]

Инкремент / декремент

python
db.set('counter', 1) db.incr('counter') # → 2 db.decr('counter') # → 1

Работа со списками

python
db.lcreate('fruits') db.ladd('fruits', 'apple') db.ladd('fruits', 'banana') db.lgetall('fruits') # → ['apple', 'banana'] db.lget('fruits', 0) # → 'apple' db.lremvalue('fruits', 'apple')

Работа с JSON-объектами (вложенные словари)

python
db.dcreate('user1') db.dadd('user1', ('name', 'Bob')) db.dadd('user1', ('age', 25)) db.dgetall('user1') # → {'name': 'Bob', 'age': 25} db.dget('user1', 'name') # → 'Bob'

Удаление

python
db.deldb() # Удаляет все данные из базы

Сохранение вручную

Если auto_dump=False:

python
db.dump()

Пример использования

python
import pickledb db = pickledb.load('settings.db', auto_dump=True) # Настройки пользователя db.set('theme', 'dark') db.set('volume', 80) print(db.get('theme')) # → 'dark' db.incr('volume') # → 81

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

  • Для хранения конфигураций, токенов, логинов и параметров.

  • В CLI-утилитах, ботах, микроскриптах.

  • Когда нужна максимальная простота и один JSON-файл.

  • Для тестовых и обучающих целей.

Заключение

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