Skip to main content

Python Utilities & Basalam Micro-Services SDK

Project description

Backbone ORM

Backbone ORM is a lightweight, asynchronous Object-Relational Mapper (ORM) for Python, built on top of the PyPika SQL query builder. It provides a clean and efficient interface for interacting with PostgreSQL databases, leveraging type hints and asynchronous programming to enable scalable and maintainable database operations.

Features

  • Asynchronous Support: Built with asyncio to support non-blocking database operations.
  • Type-Hinted Models: Utilizes Python's type hints for defining models, enhancing code clarity and editor support.
  • PostgreSQL Integration: Specifically designed for PostgreSQL databases, with support for connection pooling and schema management.
  • Redis Integration: Includes support for Redis, allowing for caching and other in-memory data storage solutions.
  • Flexible Querying: Provides a flexible query builder and supports soft deletes and model relationships.

Requirements

  • python 3.10+
  • pypika 0.48+
  • pydantic 2.0+
  • basalam.backbone-redis-cache 0.0.11+

Installation & Upgrade

pip install basalam.backbone-orm --upgrade

Usage

Define Models

from basalam.backbone_orm import ModelAbstract

class UserModel(ModelAbstract):
    id: int
    name: str

Create Repositories

import typing
import aioredis
from basalam.backbone_orm import (
    T,
    DriverEnum,
    PostgresManager,
    ConnectionConfig,
    RepositoryAbstract,
)

postgres = PostgresManager(
    default=DriverEnum.POOL,
    config=ConnectionConfig(...)
)

redis = aioredis.Redis(...)


class UserRepo(RepositoryAbstract[UserModel]):

    @classmethod
    async def connection(cls) -> PostgresConnection:
        return await postgres.acquire()

    @classmethod
    def redis(cls) -> aioredis.Redis:
        return redis

    @classmethod
    def table_name(cls) -> str:
        return "users"

    @classmethod
    def model(cls) -> typing.Type[T]:
        return UserModel

    @classmethod
    def soft_deletes(cls) -> bool:
        return True

    @classmethod
    def default_relations(cls) -> typing.List[str]:
        return []

Perform Queries

user = await UserRepo.find_by_id(1)

Testing

# install pytest
pip install pytest

# run tests
python -m pytest

Changelog

  • 0.0.11: Build and push process now handled by GitLab CI
  • 0.0.13: fix - Correct return type of update_return method
  • 0.0.14: Add support for custom order enums
  • 0.0.15: Introduce has_relations in ModelAbstract
  • 1.0.0: Introduce QueryBuilder and Connection Manager
  • 1.0.9: Extend QueryBuilderAbstract from PyPika's PostgreSQLQueryBuilder
  • 2.0.0: Drop support for Pydantic v1 and ensure compatibility with Pydantic v2
  • 2.0.6: Add with_thrashed option to find_by_id method
  • 2.0.14: Fix dict method in ModelAbstract for Pydantic v2 compatibility

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

basalam_backbone_orm-2.2.10.tar.gz (21.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

basalam_backbone_orm-2.2.10-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file basalam_backbone_orm-2.2.10.tar.gz.

File metadata

  • Download URL: basalam_backbone_orm-2.2.10.tar.gz
  • Upload date:
  • Size: 21.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for basalam_backbone_orm-2.2.10.tar.gz
Algorithm Hash digest
SHA256 abb264627fda9b591d6107f9d06098c154e3d8c10a5a745a8f9a9d401ebe1413
MD5 da63e3333f66e0676b93b6c1f68b9a60
BLAKE2b-256 f37989c32cfd5b17514636c484e55744fb2eb2f52bd5a7d1dec7d954ae312d78

See more details on using hashes here.

File details

Details for the file basalam_backbone_orm-2.2.10-py3-none-any.whl.

File metadata

File hashes

Hashes for basalam_backbone_orm-2.2.10-py3-none-any.whl
Algorithm Hash digest
SHA256 a72496adcaefd6ab5a22dee7a2884baeec5b07fd3d1d4c084e14f9581d82e1cc
MD5 6b39c6ea36f0369204031337bdea1ba3
BLAKE2b-256 639f27f07617e12981dabe9d3db44b844a320b309f1c7e910a78756fcd512d80

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page