| Name | datavoxel JSON |
| Version |
0.2.0
JSON |
| download |
| home_page | None |
| Summary | Type-Safe Modern ORM - Data in 3D |
| upload_time | 2025-10-29 09:34:48 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.8 |
| license | MIT License
Copyright (c) 2024 Juste Elysée MALANDILA
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
| keywords |
async
database
orm
prisma
sql
sqlalchemy
type-safe
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
<div align="center">
```
██████╗ █████╗ ████████╗ █████╗ ██╗ ██╗ ██████╗ ██╗ ██╗███████╗██╗
██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗██║ ██║██╔═══██╗╚██╗██╔╝██╔════╝██║
██║ ██║███████║ ██║ ███████║██║ ██║██║ ██║ ╚███╔╝ █████╗ ██║
██║ ██║██╔══██║ ██║ ██╔══██║╚██╗ ██╔╝██║ ██║ ██╔██╗ ██╔══╝ ██║
██████╔╝██║ ██║ ██║ ██║ ██║ ╚████╔╝ ╚██████╔╝██╔╝ ██╗███████╗███████╗
╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝
```
### 🗄️ *Type-Safe Modern ORM* 🗄️
<p align="center">
<strong>Data in 3D - Where Database Queries Feel Like Magic</strong>
</p>
[](https://pypi.org/project/datavoxel/)
[](https://pypi.org/project/datavoxel/)
[](https://opensource.org/licenses/MIT)
[](https://pepy.tech/project/datavoxel)
[](http://mypy-lang.org/)
[]()
[](https://github.com/psf/black)
<p align="center">
<a href="#-quick-start">Quick Start</a> •
<a href="#-features">Features</a> •
<a href="#-examples">Examples</a> •
<a href="#-documentation">Documentation</a>
</p>

</div>
## 🌟 What is DATAVOXEL?
**DATAVOXEL** is a revolutionary ORM that thinks in **3 dimensions**: **Type Safety**, **Developer Experience**, and **Performance**. Built on SQLAlchemy but with a modern twist, it makes database operations feel **natural** and **intuitive**.
```python
from datavoxel import Model, Query
class User(Model):
__table__ = "users"
id: int
name: str
email: str
created_at: datetime
# Type-safe queries with IDE autocomplete!
users = Query(User).where(User.age > 18).order_by(User.name).limit(10).all()
# 🎯 Your IDE knows exactly what type 'users' is!
```
---
## ✨ Key Features
<table>
<tr>
<td width="50%">
### 🎯 Type Safety
- ✅ **Full Type Hints** - IDE autocomplete everywhere
- 🔍 **Mypy Compatible** - Catch errors before runtime
- 📝 **IntelliSense** - See available fields instantly
- 🛡️ **Compile-Time Checks** - No more typos
</td>
<td width="50%">
### ⚡ Performance
- 🚀 **Async First** - Built for async/await
- 🔄 **Connection Pooling** - Reuse connections
- 💾 **Query Caching** - Automatic optimization
- 📊 **Lazy Loading** - Load data when needed
</td>
</tr>
<tr>
<td width="50%">
### 🎨 Developer Experience
- 💡 **Intuitive API** - Reads like English
- 🔗 **Method Chaining** - Build queries naturally
- 🏗️ **Auto Migrations** - Schema changes made easy
- 📚 **Rich Documentation** - Examples for everything
</td>
<td width="50%">
### 🏗️ Production Ready
- ✅ **Battle Tested** - Built on SQLAlchemy
- 🔒 **SQL Injection Safe** - Parameterized queries
- 🌍 **Multi-DB Support** - Postgres, MySQL, SQLite
- 📈 **Scalable** - From MVP to millions of rows
</td>
</tr>
</table>
---
## 📦 Installation
```bash
# Basic installation (SQLite support)
pip install datavoxel
# With PostgreSQL support
pip install datavoxel[postgres]
# With MySQL support
pip install datavoxel[mysql]
# With all database drivers
pip install datavoxel[all]
```
---
## 🎯 Quick Start
### Define Your Models
```python
from datavoxel import Model
from datetime import datetime
from typing import Optional
class User(Model):
__table__ = "users"
__database__ = "myapp"
id: int
username: str
email: str
is_active: bool = True
created_at: datetime = datetime.now()
bio: Optional[str] = None
```
### Simple CRUD Operations
```python
# Create
user = User(username="john_doe", email="john@example.com")
await user.save()
# Read
user = await User.get(id=1)
users = await User.filter(is_active=True).all()
# Update
user.email = "newemail@example.com"
await user.save()
# Delete
await user.delete()
```
### Advanced Queries
```python
from datavoxel import Query, Q
# Complex WHERE clauses
active_users = await Query(User).where(
(User.is_active == True) &
(User.created_at > datetime(2024, 1, 1))
).all()
# Joins
class Post(Model):
__table__ = "posts"
user_id: int
title: str
content: str
posts_with_users = await Query(Post).join(
User, Post.user_id == User.id
).select(Post.title, User.username).all()
# Aggregations
from datavoxel import Count, Avg
user_count = await Query(User).aggregate(Count(User.id))
avg_age = await Query(User).aggregate(Avg(User.age))
```
---
## 🏗️ Architecture
```mermaid
graph TB
A[Your Application] --> B[DATAVOXEL ORM]
B --> C{Query Builder}
B --> D{Model Manager}
B --> E{Migration Engine}
C --> F[Type Checker]
C --> G[SQL Generator]
D --> H[CRUD Operations]
D --> I[Relationships]
E --> J[Schema Diff]
E --> K[Auto Migrate]
F --> L[SQLAlchemy Core]
G --> L
H --> L
I --> L
J --> L
K --> L
L --> M{Database Driver}
M --> N[PostgreSQL]
M --> O[MySQL]
M --> P[SQLite]
style B fill:#2196F3
style L fill:#4CAF50
```
---
## 🔥 Advanced Features
### Relationships
```python
class Author(Model):
__table__ = "authors"
id: int
name: str
class Book(Model):
__table__ = "books"
id: int
title: str
author_id: int
# Define relationship
author = Relation(Author, foreign_key="author_id")
# Use relationships
book = await Book.get(id=1)
author = await book.author # Automatically fetches author
print(f"{book.title} by {author.name}")
```
### Transactions
```python
from datavoxel import transaction
async with transaction():
user = User(username="alice")
await user.save()
post = Post(title="First Post", user_id=user.id)
await post.save()
# Both saved or both rolled back together!
```
### Query Optimization
```python
# Eager loading (N+1 query prevention)
books = await Query(Book).prefetch(Book.author).all()
# Only 2 queries instead of N+1!
# Select only needed fields
users = await Query(User).only(User.id, User.username).all()
# Smaller result set = faster queries
# Bulk operations
await User.bulk_create([
User(username="user1", email="user1@example.com"),
User(username="user2", email="user2@example.com"),
])
```
### Custom Queries
```python
# Raw SQL when needed
results = await Query.raw("""
SELECT users.name, COUNT(posts.id) as post_count
FROM users
LEFT JOIN posts ON users.id = posts.user_id
GROUP BY users.id
HAVING post_count > 10
""")
```
---
## 📊 Comparison with Other ORMs
| Feature | DATAVOXEL | SQLAlchemy | Django ORM | Peewee | Tortoise |
|---------|-----------|------------|------------|--------|----------|
| Type Safety | ✅ Full | ⚠️ Partial | ❌ No | ❌ No | ⚠️ Partial |
| Async Support | ✅ Native | ✅ Yes | ⚠️ Limited | ❌ No | ✅ Yes |
| Learning Curve | 🟢 Easy | 🔴 Hard | 🟢 Easy | 🟢 Easy | 🟡 Medium |
| Auto Migrations | ✅ Built-in | ⚠️ Alembic | ✅ Yes | ❌ No | ✅ Yes |
| IDE Support | ⚡⚡⚡⚡⚡ | ⚡⚡ | ⚡⚡ | ⚡⚡ | ⚡⚡⚡ |
| Performance | ⚡⚡⚡⚡ | ⚡⚡⚡⚡⚡ | ⚡⚡⚡ | ⚡⚡⚡⚡ | ⚡⚡⚡⚡ |
---
## 🎨 Real-World Examples
### FastAPI Integration
```python
from fastapi import FastAPI, Depends
from datavoxel import Model, Query
app = FastAPI()
class User(Model):
__table__ = "users"
id: int
username: str
email: str
@app.get("/users/{user_id}")
async def get_user(user_id: int):
user = await User.get(id=user_id)
return user.dict() # Automatic serialization!
@app.get("/users")
async def list_users(skip: int = 0, limit: int = 10):
users = await Query(User).offset(skip).limit(limit).all()
return [user.dict() for user in users]
```
### Data Pipeline
```python
from datavoxel import Model, transaction
import asyncio
class RawData(Model):
__table__ = "raw_data"
id: int
data: str
class ProcessedData(Model):
__table__ = "processed_data"
id: int
result: str
async def process_data():
raw_items = await Query(RawData).filter(processed=False).all()
async with transaction():
for item in raw_items:
# Process data
result = transform(item.data)
# Save result
processed = ProcessedData(result=result)
await processed.save()
# Mark as processed
item.processed = True
await item.save()
```
### Multi-Tenant App
```python
from datavoxel import Model, set_schema
class Tenant(Model):
__table__ = "tenants"
id: int
schema_name: str
class User(Model):
__table__ = "users"
__schema_bound__ = True # Uses current schema
id: int
name: str
async def get_tenant_users(tenant_id: int):
tenant = await Tenant.get(id=tenant_id)
# Switch to tenant schema
set_schema(tenant.schema_name)
# Query tenant-specific data
users = await Query(User).all()
return users
```
---
## 📚 Documentation
- 📖 [Full API Reference](https://datavoxel.readthedocs.io)
- 🚀 [Quick Start Guide](https://datavoxel.readthedocs.io/quickstart)
- 🎓 [Tutorial](https://datavoxel.readthedocs.io/tutorial)
- 🏗️ [Migrations Guide](https://datavoxel.readthedocs.io/migrations)
- 🎯 [Best Practices](https://datavoxel.readthedocs.io/best-practices)
---
## 🗺️ Roadmap
### ✅ Version 0.1.0 (Current)
- [x] Type-safe models
- [x] Basic CRUD operations
- [x] Query builder
- [x] Async support
### 🚧 Version 0.2.0 (Coming Soon)
- [ ] Auto migrations
- [ ] Relationship support
- [ ] Connection pooling
- [ ] Query caching
### 🔮 Version 0.3.0 (Planned)
- [ ] Advanced relationships (M2M, polymorphic)
- [ ] Full-text search
- [ ] Database sharding
- [ ] Performance monitoring
- [ ] GraphQL integration
---
## 🤝 Contributing
Contributions welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
---
## 📜 License
MIT License - see [LICENSE](LICENSE) file for details.
---
## 👤 Author
<div align="center">
### **Juste Elysée MALANDILA**
[](https://linkedin.com/in/juste-elysee-malandila)
[](mailto:justech4dev@gmail.com)
[](https://github.com/jdevsky)
*"Making databases feel like magic."* 🗄️
</div>
---
<div align="center">
### Made with ❤️ by [Juste Elysée MALANDILA](https://linkedin.com/in/juste-elysee-malandila)
**DATAVOXEL** - *Data in 3D* 🗄️

</div>
Raw data
{
"_id": null,
"home_page": null,
"name": "datavoxel",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "async, database, orm, prisma, sql, sqlalchemy, type-safe",
"author": null,
"author_email": "Juste Elys\u00e9e MALANDILA <justech4dev@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/ea/53/0cbe5dc2099e1b0ff37c1eec2c37da997d748fbb699798e024ccf563e65b/datavoxel-0.2.0.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n\n```\n\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \n\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u255a\u2588\u2588\u2557\u2588\u2588\u2554\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2551 \n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2554\u255d \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u255a\u2588\u2588\u2557 \u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2551 \n\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2588\u2554\u255d \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2554\u255d \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n\u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n```\n\n### \ud83d\uddc4\ufe0f *Type-Safe Modern ORM* \ud83d\uddc4\ufe0f\n\n<p align=\"center\">\n <strong>Data in 3D - Where Database Queries Feel Like Magic</strong>\n</p>\n\n[](https://pypi.org/project/datavoxel/)\n[](https://pypi.org/project/datavoxel/)\n[](https://opensource.org/licenses/MIT)\n[](https://pepy.tech/project/datavoxel)\n\n[](http://mypy-lang.org/)\n[]()\n[](https://github.com/psf/black)\n\n<p align=\"center\">\n <a href=\"#-quick-start\">Quick Start</a> \u2022\n <a href=\"#-features\">Features</a> \u2022\n <a href=\"#-examples\">Examples</a> \u2022\n <a href=\"#-documentation\">Documentation</a>\n</p>\n\n\n\n</div>\n\n## \ud83c\udf1f What is DATAVOXEL?\n\n**DATAVOXEL** is a revolutionary ORM that thinks in **3 dimensions**: **Type Safety**, **Developer Experience**, and **Performance**. Built on SQLAlchemy but with a modern twist, it makes database operations feel **natural** and **intuitive**.\n\n```python\nfrom datavoxel import Model, Query\n\nclass User(Model):\n __table__ = \"users\"\n \n id: int\n name: str\n email: str\n created_at: datetime\n\n# Type-safe queries with IDE autocomplete!\nusers = Query(User).where(User.age > 18).order_by(User.name).limit(10).all()\n# \ud83c\udfaf Your IDE knows exactly what type 'users' is!\n```\n\n---\n\n## \u2728 Key Features\n\n<table>\n<tr>\n<td width=\"50%\">\n\n### \ud83c\udfaf Type Safety\n- \u2705 **Full Type Hints** - IDE autocomplete everywhere\n- \ud83d\udd0d **Mypy Compatible** - Catch errors before runtime\n- \ud83d\udcdd **IntelliSense** - See available fields instantly\n- \ud83d\udee1\ufe0f **Compile-Time Checks** - No more typos\n\n</td>\n<td width=\"50%\">\n\n### \u26a1 Performance\n- \ud83d\ude80 **Async First** - Built for async/await\n- \ud83d\udd04 **Connection Pooling** - Reuse connections\n- \ud83d\udcbe **Query Caching** - Automatic optimization\n- \ud83d\udcca **Lazy Loading** - Load data when needed\n\n</td>\n</tr>\n<tr>\n<td width=\"50%\">\n\n### \ud83c\udfa8 Developer Experience\n- \ud83d\udca1 **Intuitive API** - Reads like English\n- \ud83d\udd17 **Method Chaining** - Build queries naturally\n- \ud83c\udfd7\ufe0f **Auto Migrations** - Schema changes made easy\n- \ud83d\udcda **Rich Documentation** - Examples for everything\n\n</td>\n<td width=\"50%\">\n\n### \ud83c\udfd7\ufe0f Production Ready\n- \u2705 **Battle Tested** - Built on SQLAlchemy\n- \ud83d\udd12 **SQL Injection Safe** - Parameterized queries\n- \ud83c\udf0d **Multi-DB Support** - Postgres, MySQL, SQLite\n- \ud83d\udcc8 **Scalable** - From MVP to millions of rows\n\n</td>\n</tr>\n</table>\n\n---\n\n## \ud83d\udce6 Installation\n\n```bash\n# Basic installation (SQLite support)\npip install datavoxel\n\n# With PostgreSQL support\npip install datavoxel[postgres]\n\n# With MySQL support \npip install datavoxel[mysql]\n\n# With all database drivers\npip install datavoxel[all]\n```\n\n---\n\n## \ud83c\udfaf Quick Start\n\n### Define Your Models\n\n```python\nfrom datavoxel import Model\nfrom datetime import datetime\nfrom typing import Optional\n\nclass User(Model):\n __table__ = \"users\"\n __database__ = \"myapp\"\n \n id: int\n username: str\n email: str\n is_active: bool = True\n created_at: datetime = datetime.now()\n bio: Optional[str] = None\n```\n\n### Simple CRUD Operations\n\n```python\n# Create\nuser = User(username=\"john_doe\", email=\"john@example.com\")\nawait user.save()\n\n# Read\nuser = await User.get(id=1)\nusers = await User.filter(is_active=True).all()\n\n# Update\nuser.email = \"newemail@example.com\"\nawait user.save()\n\n# Delete\nawait user.delete()\n```\n\n### Advanced Queries\n\n```python\nfrom datavoxel import Query, Q\n\n# Complex WHERE clauses\nactive_users = await Query(User).where(\n (User.is_active == True) & \n (User.created_at > datetime(2024, 1, 1))\n).all()\n\n# Joins\nclass Post(Model):\n __table__ = \"posts\"\n user_id: int\n title: str\n content: str\n\nposts_with_users = await Query(Post).join(\n User, Post.user_id == User.id\n).select(Post.title, User.username).all()\n\n# Aggregations\nfrom datavoxel import Count, Avg\n\nuser_count = await Query(User).aggregate(Count(User.id))\navg_age = await Query(User).aggregate(Avg(User.age))\n```\n\n---\n\n## \ud83c\udfd7\ufe0f Architecture\n\n```mermaid\ngraph TB\n A[Your Application] --> B[DATAVOXEL ORM]\n \n B --> C{Query Builder}\n B --> D{Model Manager}\n B --> E{Migration Engine}\n \n C --> F[Type Checker]\n C --> G[SQL Generator]\n \n D --> H[CRUD Operations]\n D --> I[Relationships]\n \n E --> J[Schema Diff]\n E --> K[Auto Migrate]\n \n F --> L[SQLAlchemy Core]\n G --> L\n H --> L\n I --> L\n J --> L\n K --> L\n \n L --> M{Database Driver}\n M --> N[PostgreSQL]\n M --> O[MySQL]\n M --> P[SQLite]\n \n style B fill:#2196F3\n style L fill:#4CAF50\n```\n\n---\n\n## \ud83d\udd25 Advanced Features\n\n### Relationships\n\n```python\nclass Author(Model):\n __table__ = \"authors\"\n id: int\n name: str\n\nclass Book(Model):\n __table__ = \"books\"\n id: int\n title: str\n author_id: int\n \n # Define relationship\n author = Relation(Author, foreign_key=\"author_id\")\n\n# Use relationships\nbook = await Book.get(id=1)\nauthor = await book.author # Automatically fetches author\nprint(f\"{book.title} by {author.name}\")\n```\n\n### Transactions\n\n```python\nfrom datavoxel import transaction\n\nasync with transaction():\n user = User(username=\"alice\")\n await user.save()\n \n post = Post(title=\"First Post\", user_id=user.id)\n await post.save()\n \n # Both saved or both rolled back together!\n```\n\n### Query Optimization\n\n```python\n# Eager loading (N+1 query prevention)\nbooks = await Query(Book).prefetch(Book.author).all()\n# Only 2 queries instead of N+1!\n\n# Select only needed fields\nusers = await Query(User).only(User.id, User.username).all()\n# Smaller result set = faster queries\n\n# Bulk operations\nawait User.bulk_create([\n User(username=\"user1\", email=\"user1@example.com\"),\n User(username=\"user2\", email=\"user2@example.com\"),\n])\n```\n\n### Custom Queries\n\n```python\n# Raw SQL when needed\nresults = await Query.raw(\"\"\"\n SELECT users.name, COUNT(posts.id) as post_count\n FROM users\n LEFT JOIN posts ON users.id = posts.user_id\n GROUP BY users.id\n HAVING post_count > 10\n\"\"\")\n```\n\n---\n\n## \ud83d\udcca Comparison with Other ORMs\n\n| Feature | DATAVOXEL | SQLAlchemy | Django ORM | Peewee | Tortoise |\n|---------|-----------|------------|------------|--------|----------|\n| Type Safety | \u2705 Full | \u26a0\ufe0f Partial | \u274c No | \u274c No | \u26a0\ufe0f Partial |\n| Async Support | \u2705 Native | \u2705 Yes | \u26a0\ufe0f Limited | \u274c No | \u2705 Yes |\n| Learning Curve | \ud83d\udfe2 Easy | \ud83d\udd34 Hard | \ud83d\udfe2 Easy | \ud83d\udfe2 Easy | \ud83d\udfe1 Medium |\n| Auto Migrations | \u2705 Built-in | \u26a0\ufe0f Alembic | \u2705 Yes | \u274c No | \u2705 Yes |\n| IDE Support | \u26a1\u26a1\u26a1\u26a1\u26a1 | \u26a1\u26a1 | \u26a1\u26a1 | \u26a1\u26a1 | \u26a1\u26a1\u26a1 |\n| Performance | \u26a1\u26a1\u26a1\u26a1 | \u26a1\u26a1\u26a1\u26a1\u26a1 | \u26a1\u26a1\u26a1 | \u26a1\u26a1\u26a1\u26a1 | \u26a1\u26a1\u26a1\u26a1 |\n\n---\n\n## \ud83c\udfa8 Real-World Examples\n\n### FastAPI Integration\n\n```python\nfrom fastapi import FastAPI, Depends\nfrom datavoxel import Model, Query\n\napp = FastAPI()\n\nclass User(Model):\n __table__ = \"users\"\n id: int\n username: str\n email: str\n\n@app.get(\"/users/{user_id}\")\nasync def get_user(user_id: int):\n user = await User.get(id=user_id)\n return user.dict() # Automatic serialization!\n\n@app.get(\"/users\")\nasync def list_users(skip: int = 0, limit: int = 10):\n users = await Query(User).offset(skip).limit(limit).all()\n return [user.dict() for user in users]\n```\n\n### Data Pipeline\n\n```python\nfrom datavoxel import Model, transaction\nimport asyncio\n\nclass RawData(Model):\n __table__ = \"raw_data\"\n id: int\n data: str\n\nclass ProcessedData(Model):\n __table__ = \"processed_data\"\n id: int\n result: str\n\nasync def process_data():\n raw_items = await Query(RawData).filter(processed=False).all()\n \n async with transaction():\n for item in raw_items:\n # Process data\n result = transform(item.data)\n \n # Save result\n processed = ProcessedData(result=result)\n await processed.save()\n \n # Mark as processed\n item.processed = True\n await item.save()\n```\n\n### Multi-Tenant App\n\n```python\nfrom datavoxel import Model, set_schema\n\nclass Tenant(Model):\n __table__ = \"tenants\"\n id: int\n schema_name: str\n\nclass User(Model):\n __table__ = \"users\"\n __schema_bound__ = True # Uses current schema\n id: int\n name: str\n\nasync def get_tenant_users(tenant_id: int):\n tenant = await Tenant.get(id=tenant_id)\n \n # Switch to tenant schema\n set_schema(tenant.schema_name)\n \n # Query tenant-specific data\n users = await Query(User).all()\n return users\n```\n\n---\n\n## \ud83d\udcda Documentation\n\n- \ud83d\udcd6 [Full API Reference](https://datavoxel.readthedocs.io)\n- \ud83d\ude80 [Quick Start Guide](https://datavoxel.readthedocs.io/quickstart)\n- \ud83c\udf93 [Tutorial](https://datavoxel.readthedocs.io/tutorial)\n- \ud83c\udfd7\ufe0f [Migrations Guide](https://datavoxel.readthedocs.io/migrations)\n- \ud83c\udfaf [Best Practices](https://datavoxel.readthedocs.io/best-practices)\n\n---\n\n## \ud83d\uddfa\ufe0f Roadmap\n\n### \u2705 Version 0.1.0 (Current)\n- [x] Type-safe models\n- [x] Basic CRUD operations\n- [x] Query builder\n- [x] Async support\n\n### \ud83d\udea7 Version 0.2.0 (Coming Soon)\n- [ ] Auto migrations\n- [ ] Relationship support\n- [ ] Connection pooling\n- [ ] Query caching\n\n### \ud83d\udd2e Version 0.3.0 (Planned)\n- [ ] Advanced relationships (M2M, polymorphic)\n- [ ] Full-text search\n- [ ] Database sharding\n- [ ] Performance monitoring\n- [ ] GraphQL integration\n\n---\n\n## \ud83e\udd1d Contributing\n\nContributions welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n---\n\n## \ud83d\udcdc License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n---\n\n## \ud83d\udc64 Author\n\n<div align=\"center\">\n\n### **Juste Elys\u00e9e MALANDILA**\n\n[](https://linkedin.com/in/juste-elysee-malandila)\n[](mailto:justech4dev@gmail.com)\n[](https://github.com/jdevsky)\n\n*\"Making databases feel like magic.\"* \ud83d\uddc4\ufe0f\n\n</div>\n\n---\n\n<div align=\"center\">\n\n### Made with \u2764\ufe0f by [Juste Elys\u00e9e MALANDILA](https://linkedin.com/in/juste-elysee-malandila)\n\n**DATAVOXEL** - *Data in 3D* \ud83d\uddc4\ufe0f\n\n\n\n</div>\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2024 Juste Elys\u00e9e MALANDILA\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "Type-Safe Modern ORM - Data in 3D",
"version": "0.2.0",
"project_urls": {
"Bug Tracker": "https://github.com/jdevsky/datavoxel/issues",
"Documentation": "https://github.com/jdevsky/datavoxel#readme",
"Homepage": "https://github.com/jdevsky/datavoxel",
"Repository": "https://github.com/jdevsky/datavoxel.git"
},
"split_keywords": [
"async",
" database",
" orm",
" prisma",
" sql",
" sqlalchemy",
" type-safe"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "083fd466b8e134231bc03d8f9fd7ecfa38d1c5ebfc27dea62c3bdf568f69066b",
"md5": "c317d9ccb7f4d51cb3c83690ac687a74",
"sha256": "9703bb0c45f04168b84b1cf9840fab21a543186478551f1206bef37f0e915544"
},
"downloads": -1,
"filename": "datavoxel-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c317d9ccb7f4d51cb3c83690ac687a74",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 10483,
"upload_time": "2025-10-29T09:34:47",
"upload_time_iso_8601": "2025-10-29T09:34:47.159364Z",
"url": "https://files.pythonhosted.org/packages/08/3f/d466b8e134231bc03d8f9fd7ecfa38d1c5ebfc27dea62c3bdf568f69066b/datavoxel-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ea530cbe5dc2099e1b0ff37c1eec2c37da997d748fbb699798e024ccf563e65b",
"md5": "6489c5dbd5288a76b531b8b7bd43f6bf",
"sha256": "1196d588e174df59d18ec9a7939a70d271aac8053622a43c974b955e5d9bc749"
},
"downloads": -1,
"filename": "datavoxel-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "6489c5dbd5288a76b531b8b7bd43f6bf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 11696,
"upload_time": "2025-10-29T09:34:48",
"upload_time_iso_8601": "2025-10-29T09:34:48.576457Z",
"url": "https://files.pythonhosted.org/packages/ea/53/0cbe5dc2099e1b0ff37c1eec2c37da997d748fbb699798e024ccf563e65b/datavoxel-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-29 09:34:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jdevsky",
"github_project": "datavoxel",
"github_not_found": true,
"lcname": "datavoxel"
}