Simple interface to the ZIP files to use them as a database
Project description
ZFDB
A lightweight, pure Python library for file-based database operations with encryption support. ZFDB provides a secure and easy way to store and manage data in a local file system using ZIP archives.
Features
- 🔒 Password-based encryption
- 📁 ZIP-based storage with compression
- 🔍 Record search capabilities
- 🏷️ Metadata support
- ✅ Data integrity validation
- 🔄 Automatic compaction
- 💾 Backup functionality
- 📝 JSON support
- 🐍 Pure Python (no external dependencies)
Installation
Clone the repository or install the package using pip:
pip install zfdb
# or
git clone https://github.com/semolex/zfdb.git
cd zfdb
Quick Start
from zfdb import Database, DatabaseConfig
from pathlib import Path
# Create a database configuration
config = DatabaseConfig(
name="mydb",
path=Path("mydb.zip"),
password="secret123", # Optional
compression_level=9
)
# Initialize database
db = Database(config)
# Insert records
db.insert(
"user1",
'{"name": "John Doe", "email": "john@example.com"}',
metadata={"type": "user"}
)
# Read records
record = db.get("user1")
if record:
user_data = record.json # Parse as JSON
print(f"User: {user_data['name']}")
print(f"Record created: {record.metadata['created_at']}")
# Search records
results = db.search("user")
print(f"Found records: {results}")
# Create backup
db.backup("mydb_backup.zip")
Detailed Usage
Configuration
from zfdb import DatabaseConfig
from pathlib import Path
config = DatabaseConfig(
name="mydb", # Database name
path=Path("mydb.zip"), # Database file path
password="secret123", # Optional encryption password
compression_level=6, # ZIP compression level (0-9)
max_size=1024 * 1024 * 100, # Maximum database size (100MB)
auto_compact=True, # Enable automatic compaction
version="1.0.0" # Database version
)
Working with Records
Insert Records
# Insert JSON data
db.insert(
"config1",
'{"setting": "value"}',
metadata={"type": "configuration"}
)
# Insert text data
db.insert(
"note1",
"This is a text note",
metadata={"type": "note"}
)
# Insert binary data
db.insert(
"binary1",
b"\x00\x01\x02\x03",
metadata={"type": "binary"}
)
Read Records
# Get record
record = db.get("config1")
# Access data in different formats
raw_data = record.raw # bytes
text_data = record.text # str
json_data = record.json # parsed JSON
# Access metadata
created_at = record.metadata['created_at']
record_size = record.metadata['size']
Update Records
db.update(
"note1",
"Updated content",
metadata={"updated_at": datetime.utcnow().isoformat()}
)
Delete Records
db.delete("note1")
Database Management
List Records
all_records = db.list_records()
Search Records
# Search by name pattern
notes = db.search("note")
configs = db.search("config")
Database Maintenance
# Compact database (remove deleted records)
db.compact()
# Create backup
db.backup("backup.zip")
Data Security
ZFDB provides several security features:
- Password Protection: Database contents are encrypted using a password-derived key
- Data Integrity: Each record includes a SHA-256 checksum
- Size Limits: Configurable database size limits
- Validation: Automatic data integrity checking
Best Practices
- Regular Backups: Use the
backup()method regularly - Error Handling: Always handle potential exceptions:
try: record = db.get("key") except DatabaseError as e: logger.error(f"Database error: {e}")
- Resource Management: Close database when done:
try: # Use database finally: db.compact() # Optional cleanup
Limitations
- Not a real database
- Not suitable for concurrent access
- No built-in indexing
- Limited query capabilities
- Not recommended for very large datasets
- Simple encryption (not suitable for highly sensitive data)
Testing and linting
poetry run black zfdb/
poetry run isort zfdb/
poetry run mypy zfdb/
poetry run pytest tests/
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/yourfeature) - Commit your changes (
git commit -m 'Add some yourfeature') - Push to the branch (
git push origin feature/yourfeature) - Open a Pull Request
- Use
isort,mypyandblackfor code formatting and type checking
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Created to be used in local applications to persists data in case there is no other database available
- Inspired by simple key-value stores
- Built using Python standard library components
- Designed for simplicity and ease of use
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 zfdb-0.1.1.tar.gz.
File metadata
- Download URL: zfdb-0.1.1.tar.gz
- Upload date:
- Size: 6.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.9.13 Darwin/23.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbab8dbc80716be8e45e2ea542d4c5c41e542dc8e91d5e70dcb345c304fd0e91
|
|
| MD5 |
11dc815c2c3d21e20e87d58602414a72
|
|
| BLAKE2b-256 |
c21a28e32e383e4d968ca955606da03690653b20000f47288bb08c1e118c42bc
|
File details
Details for the file zfdb-0.1.1-py3-none-any.whl.
File metadata
- Download URL: zfdb-0.1.1-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.9.13 Darwin/23.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d94555e4a6c8c1b501149c20735d3de6caca519f04f2c0d9dfa573d6367b737b
|
|
| MD5 |
94b41924bb3c8fc39341de6c92946664
|
|
| BLAKE2b-256 |
98f6755440237b183ea48e71c0a8559d3bc564b02e3cbf74f2713af05bedfabd
|