Skip to main content

Model CRUD manager to handle databases with asynchronous SQLAlchemy sessions

Project description

SQLAlchemy Model CRUD

Model CRUD manager to handle databases with asynchronous SQLAlchemy sessions.

Project Status

⚠️ Warning: This project is currently in development phase.

This project is in an early stage of development and may contain bugs. It is not recommended for use in production environments.

Why use sa_crudmodel?

  • 🚀 Fast to code: Increase the speed to develop integrations features.
  • Fewer bugs: Reduce human (developer) induced errors.
  • 💡 Intuitive: Great editor support. Completion everywhere. Less time debugging.
  • 🤓 Easy: Designed to be easy to use and learn. Less time reading docs.
  • 〽️ Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.

Requirements

Python 3.8+

SQLAlchemy Model CRUD stands on the soulders of giants:

Installation

$  pip install sa-modelcrud

Example

Database Model prepare

  • Create a database model with:
from sqlalchemy.orm import Mapped, mapped_column
from sa_modelcrud.models import ModelBase, Timestamp


class Sample(Timestamp, ModelBase):
    # ModelBase contains id and uid properties
    email: Mapped[str] = mapped_column(nullable=True, unique=True)

Create schemas

from typing import Optional
from uuid import UUID
from pydantic import BaseModel


class SampleBase(BaseModel):
    id: Optional[UUID] = None
    email: Optional[str] = None

class SampleCreate(SampleBase):
    ...

class SampleUpdate(SampleBase):
    ...

Create CRUD

from sa_modelcrud import CRUDBase


class CRUDSample(CRUDBase[Sample, SampleCreate, SampleUpdate]):
    model = Sample


samples = CRUDSample()

Create session

from sqlalchemy.ext.asyncio import (
    AsyncSession,
    create_async_engine,
    async_sessionmaker
)


DB_URI = "sqlite+aiosqlite:///./db.sqlite3"

async_engine: AsyncEngine = create_async_engine(
    DB_URI,
    future=True,
    connect_args={"check_same_thread": False}
)

AsyncSessionLocal: AsyncSession = async_sessionmaker(
    bind=async_engine,
    class_=AsyncSession,
    expire_on_commit=False
)

Use the CRUD

async with AsyncSessionLocal() as db:
    data = SampleCreate(email="sample@sample")

    # save data into database
    sample_obj = await samples.create(db=db, element=data)

General CRUD Methods

All inherited CRUDBase instances have the following methods:

  • .get(..., id): Get row from model by uid.
  • .get_or_raise(..., id): Try to get row from model by uid. Raise if not object found.
  • .list(...): Get multi items from database.
  • .filter(..., whereclause): Get items from database using whereclause to filter.
  • .find(..., **kwargs): Find elements with kwargs.
  • .find_one(..., **kwargs): Find an element with kwargs.
  • .create(..., element): Create an element into database.
  • .bulk_create(..., elements): Create elements into database.
  • .update(..., obj, data): Update a database obj with an update data schema.
  • .delete(..., id): Delete an item from database.

TODO:

  • Paginate results of methods list, filter and find.
  • Add default values for offset and limit on paginated methods.
  • Add support for Sync Sessions.
  • Create complete documentation in Readthedocs.

Contributions and Feedback

I would love to receive contributions and feedback! If you'd like to get involved, please contact me through one of the contact methods in my Profile.

License

This project is licensed under the terms of the 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

sa_modelcrud-0.4.1.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

sa_modelcrud-0.4.1-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file sa_modelcrud-0.4.1.tar.gz.

File metadata

  • Download URL: sa_modelcrud-0.4.1.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for sa_modelcrud-0.4.1.tar.gz
Algorithm Hash digest
SHA256 918c2b467802bf0943e045402ccaef4c6e179147f6df8dc3e6f5913b19cf4002
MD5 5941b037dbdecaee93bca8c6559bf38d
BLAKE2b-256 5d71f080029325a6e545ec6af1a98d07ca61e65e938bb076a839bb35d951b4f6

See more details on using hashes here.

File details

Details for the file sa_modelcrud-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: sa_modelcrud-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for sa_modelcrud-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 06ae0fc9f1c2175ccf124656f87c45a927f8076516b24e0bc6d3cd147a9b1d5e
MD5 c9a8a4d9cb9feba6082d84cf1ca2362e
BLAKE2b-256 2addcf6e054295d04de20f6a58971d4047fd13fe7b59c3958fe0c33294656f46

See more details on using hashes here.

Supported by

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