searchable json database with persistence
Project description
json_database
Searchable, persistent Python dict database backed by JSON files — for those times when SQL is overkill.
Install
pip install json_database
Encryption features additionally require pycryptodomex:
pip install json_database pycryptodomex
Quick Start
from json_database import JsonStorage, JsonDatabase
from json_database.search import Query
# Persistent dict
with JsonStorage("/tmp/config.json") as cfg:
cfg["host"] = "localhost"
cfg["port"] = 5432
# auto-saved on exit
# Searchable list-of-records
with JsonDatabase("users", "/tmp/users.jsondb") as db:
db.add_item({"name": "Alice", "role": "admin"})
db.add_item({"name": "Bob", "role": "user"})
admins = db.search_by_value("role", "admin")
# Fluent query builder
results = Query(db).equal("role", "user").build()
Features
- Pure Python, minimal dependencies (
combo_lockonly) - Persistent dict (
JsonStorage) and list-of-records database (JsonDatabase) - Recursive search by key and key/value pair, with optional fuzzy matching
- Fluent
Querybuilder for multi-condition filtering - AES-256-GCM encryption at rest (
EncryptedJsonStorage) - XDG Base Directory compliant variants for Linux applications
- File locking via
combo_lockfor safe concurrent access - Supports commented JSON files (
//and#line comments) - Arbitrary Python objects stored via automatic
jsonify_recursivelyconversion - HiveMind plugin (
hivemind-json-db-plugin) for voice assistant integration
Configuration / Key Options
| Class | Default path | Use for |
|---|---|---|
JsonStorage(path) |
user-specified | any persistent dict |
JsonStorageXDG(name) |
~/.cache/json_database/{name}.json |
cache / temp data |
JsonConfigXDG(name) |
~/.config/json_database/{name}.json |
app settings |
JsonDatabaseXDG(name) |
~/.local/share/json_database/{name}.jsondb |
persistent records |
EncryptedJsonStorage(key, path) |
user-specified | sensitive data at rest |
Note: Item IDs in
JsonDatabaseare stable list indices.add_itemandappendreturn the zero-based slot index of the new item. Removing an item tombstones its slot rather than shifting subsequent IDs, so an ID obtained fromadd_itemorget_item_idremains valid for the lifetime of the database file. Tombstoned slots are invisible to iteration, search,__contains__, and__len__; accessing one viadb[item_id]raisesInvalidItemID.
Warning: Encryption keys longer than 16 bytes are silently truncated to 16 bytes. Always use exactly 16 bytes.
Documentation
- Installation — dependencies, Python version support
- Quick Start — 5-minute walkthrough with examples
- API Reference — all public classes and methods
- Encryption — AES-GCM details, key rules, security notes
- XDG Paths — XDG spec support and path resolution
- Search and Query — all filter methods, fuzzy matching
- Development — running tests, CI, contributing
- Architecture — class hierarchy, data flow, design
HiveMind Integration
This project includes a native hivemind-plugin-manager
integration (>=0.5.0), providing JSON-backed storage for HiveMind client
credentials and permissions via the hivemind-json-db-plugin entry point.
The storage layer is schema-less: the entire Client.__dict__ is persisted
per record, so new Client fields (e.g. the metadata dict added in
plugin-manager 0.5.0) round-trip transparently without changes here. See
Architecture → HiveMind Plugin for
the storage shape and the deep-copy aliasing contract.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file json_database-0.10.2a1.tar.gz.
File metadata
- Download URL: json_database-0.10.2a1.tar.gz
- Upload date:
- Size: 47.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0dc7932743665a356c89dcb771d03d2af9aab2de095bc08da757a628bb3848b4
|
|
| MD5 |
96401e460abac1df6fd0fc64a46be5aa
|
|
| BLAKE2b-256 |
ea347c749b6d06e73972dfabbd72b2131128de27fd0e4cc05d078004039a8294
|
File details
Details for the file json_database-0.10.2a1-py3-none-any.whl.
File metadata
- Download URL: json_database-0.10.2a1-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69600f08a7b47fcedf8ad35fa0ae07fbc0cd68b7476852368e95642b249af459
|
|
| MD5 |
b4fbc54ffca8786f8287561630b63c9a
|
|
| BLAKE2b-256 |
e1b5fa76e0886b0c945cb8d9007d0629192e78bbcdf927b39ae3cdb78183297c
|