Add your description here
Project description
PocketBase ORM
A Python ORM (Object-Relational Mapper) for PocketBase that provides Pydantic model integration and automatic schema synchronization.
Features
- 🚀 Pydantic model integration for data validation and serialization
- 🔄 Automatic schema synchronization with PocketBase collections
- 📦 Support for most PocketBase field types including relations and file uploads
- 🛠️ Simple and intuitive API for CRUD operations
Installation
uv install pocketbase-orm
Quick Start
from pocketbase_orm import PBModel
from pydantic import EmailStr, AnyUrl, Field
from datetime import datetime, timezone
from pocketbase.client import FileUpload
# Define your models
class RelatedModel(PBModel, collection="related_models"): # Optionally specify collection name
name: str
class Example(PBModel): # Collection name will be "examples" by default
text_field: str
number_field: int
is_active: bool
url_field: AnyUrl
created_at: datetime
options: list[str]
email_field: EmailStr | None = None
related_model: RelatedModel | str = Field(..., description="Related model reference")
image: FileUpload | str = Field(default=None, description="Image file upload")
# Initialize PocketBase client and bind it to the ORM
client = PBModel.init_client(
"YOUR_POCKETBASE_URL",
"admin@example.com", # Optional admin email
"password" # Optional admin password
)
# Sync collection schemas
RelatedModel.sync_collection()
Example.sync_collection()
# Create and save records
related_model = RelatedModel(name="Related Model")
related_model.save()
# Create a new record with file upload
with open("image.png", "rb") as f:
example = Example(
text_field="Test with image",
number_field=123,
is_active=True,
email_field="test@example.com",
url_field="http://example.com",
created_at=datetime.now(timezone.utc),
options=["option1", "option2"],
related_model=related_model.id,
image=FileUpload(("image.png", f))
)
example.save()
# Query records
examples = Example.get_full_list()
single_example = Example.get_one("RECORD_ID")
filtered_example = Example.get_first_list_item(filter='email_field = "test@example.com"')
# Get file contents
image_bytes = example.get_file_contents("image")
Model Definition
Models inherit from PBModel and use Pydantic field types:
from enum import Enum
class UserType(str, Enum):
ADMIN = "admin"
REGULAR = "regular"
GUEST = "guest"
class MyModel(PBModel, collection="my_models"): # Specify custom collection name
name: str
age: int
email: EmailStr | None = None
user_type: UserType # Will be created as a select field in PocketBase
The collection name will be automatically derived from the class name (pluralized) if not specified using the collection parameter when subclassing PBModel.
Supported Field Types
- Text:
str - Number:
int,float - Boolean:
bool - Email:
EmailStr - URL:
AnyUrl - DateTime:
datetime - JSON:
List,Dict - File:
FileUpload | str - Relation:
Union[RelatedModel, str] - Select:
Enum
API Reference
Class Methods
bind_client(client: PocketBase): Bind PocketBase client to the model classsync_collection(): Create or update the collection schema in PocketBasedelete_collection(): Delete the entire collection from PocketBaseget_one(id: str, **kwargs) -> T: Get a single record by IDget_list(*args, **kwargs) -> List[T]: Get a paginated list of recordsget_full_list(*args, **kwargs) -> List[T]: Get all recordsget_first_list_item(*args, **kwargs) -> T: Get the first matching recorddelete_by_id(id: str, **kwargs): Delete a record by ID
Instance Methods
save() -> T: Create or update the recorddelete(): Delete the current recordget_file_contents(field: str) -> bytes: Get the contents of a file field
Limitations
- The ORM currently supports basic CRUD operations and schema synchronization
- Complex queries should use the PocketBase client directly
- Relationship handling is limited to single relations
- Indexes must be created manually
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 pocketbase_orm-0.13.0.tar.gz.
File metadata
- Download URL: pocketbase_orm-0.13.0.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.29
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fc2afef3630b1527b4e60b373ca60221050609533634c31ad5f61744675f982
|
|
| MD5 |
39fe548c95a45bf0338a8a2f0031e2ac
|
|
| BLAKE2b-256 |
06a1430078be2548a634e81194a72ddcb48d3295dcacb939faa19a34d0be6c23
|
File details
Details for the file pocketbase_orm-0.13.0-py3-none-any.whl.
File metadata
- Download URL: pocketbase_orm-0.13.0-py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.29
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ef9cdc00e2983513f831045518ea1eabb6ba36f62466c34a58316379f72c2d0
|
|
| MD5 |
26b97ddd987dfbc7e041162cbb7747b8
|
|
| BLAKE2b-256 |
e8c74ba5a568474eef0880a1246743e7d75c55d5e9cf764e4cbe073b739de18a
|