QuickSave is a fast, memory-efficient, and lightweight key-value database.
Project description
QuickSave
QuickSave is a fast, memory-efficient, and lightweight key-value database designed for use in small applications. It operates as a pure Python solution, offering a dictionary-like interface for easy integration. QuickSave works efficiently without dependencies, but if you want to boost its performance even further, you can install msgspec, which significantly enhances its speed.
Documentation
📖 Table of Contents
Why QuickSave?
QuickSave stands out for its speed, memory efficiency, and simplicity. Here are some of the key reasons you should consider using it:
- 🚀 High Performance: QuickSave is designed to be fast, with minimal overhead.
- 💡 Low Memory Usage: The library is optimized for memory efficiency, making it a great choice for projects with limited resources.
- 🧵 Thread-Safe: It supports thread-safe operations, ensuring that it works reliably in concurrent environments.
- 🔀 Both sync and async support: You can use either sync or async version of QuickSave.
- 🏎️ Boosted Performance with
msgspec: By installing the optionalmsgspeclibrary, you can further enhance QuickSave's performance, especially when handling complex data types. - 🔧 No Dependencies: QuickSave is a pure Python library, which means it has no external dependencies, making it easy to install and use in any Python project.
Installation
Install QuickSave using pip:
pip install --upgrade qsave
Optionally, install msgspec to boost performance:
pip install msgspec==0.19.0
If you want use async version of QuickSave:
pip install qsave[async]
Getting Started
To start using QuickSave, import it and initialize your database:
from qsave import QuickSave
db = QuickSave(path="path/to/your/file.json", pretty=True)
The pretty argument beautifies the saved data for better readability (optional).
Examples
Basic Usage
By default, changes are automatically saved when the with block ends:
with db.session() as session:
session["key"] = "value"
print(session.get("key")) # Output: None, not yet saved
# Exiting the block automatically commits changes
with db.session() as session:
print(session.get("key")) # Output: value
Manual Commit (commit_on_expire=False)
For full control over when changes are saved, use commit_on_expire=False:
with db.session(commit_on_expire=False) as session:
session["key"] = "manual_value"
print(session.get("key")) # Output: None, not yet saved
session.commit() # Now changes are saved
print(session.get("key")) # Output: manual_value
with db.session() as session:
print(session.get("key")) # Output: manual_value
Commit and Rollback
You can manually save or discard changes during a session:
with db.session() as session:
session["key"] = "temp_value"
session.rollback() # Discard changes
print(session.get("key")) # Output: None
Nested Data
with db.session() as session:
session["nested"] = {"key": [1, 2, 3]}
session.commit()
with db.session() as session:
print(session["nested"]) # Output: {"key": [1, 2, 3]}
Async version:
from qsave.asyncio import AsyncQuickSave
db = AsyncQuickSave("path/to/your/file.json")
async def main():
async with db.session(False) as session:
print(len(session))
await session.commit()
await session.rollback() # NOTE: after commit, rollback does nothing :(
# only commit and rollback need to be awaited
# other functionalities remain the same as sync version
License
This repository is licensed under MIT License.
Project details
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 qsave-1.1.2.tar.gz.
File metadata
- Download URL: qsave-1.1.2.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.0.0 CPython/3.11.6 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b38fda848b5b7f4f80452033cae4a6548c93cd2c408f1ace13556a96e135d46d
|
|
| MD5 |
b3f897ab77a6d58802acf8348f4a788b
|
|
| BLAKE2b-256 |
aed7ed8c1040e94d12ee6b501e15c5d3e9a86fcac2b251ecd2951f7ab161d6dd
|
File details
Details for the file qsave-1.1.2-py3-none-any.whl.
File metadata
- Download URL: qsave-1.1.2-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.0.0 CPython/3.11.6 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1b10dc13331ac78ae45afdd38166b31df89e3ef6e95c53a679a699732f9bae3
|
|
| MD5 |
4b7adc39a0286edece14882ceffcf47f
|
|
| BLAKE2b-256 |
2889440d5eacd58d2788c9ce28c0769a937664208448424a7ba2aa65e7b5776e
|