Skip to main content

Active record mixin for SQLModel

Project description

🚀 SQLModelRepo - A simple CRUD util for SQLModel

SQLModelRepo is a simple and powerful repository pattern implementation for managing database interactions using the SQLAlchemy-backed SQLModel ORM. It abstracts common database tasks (CRUD - Create, Read, Update, Delete) 🛠️, making data manipulation and access easier, with support for filtering, pagination, and session management 🎯.

🎯 Features

  • 🏷️ Generic Repository: Perform Create, Read (single or multiple), Update, and Delete (CRUD) operations effortlessly.
  • 🔄 Session Management: Automate session reuse or creation, ensuring efficient transaction handling.
  • 🔍 Filtering & Pagination: Easily filter and paginate results.
  • ♻️ Partial Updates: Update records partially using SQL.

📦 Installation

pip install sqlmodel_repo

Ensure you have sqlmodel and other dependencies installed.

🚀 Usage

Define your SQLModel Repository 🏗️

Create an SQLModel class representing your database table.

...
from sqlmodel_repo import SQLModelRepo

class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    username: str
    email: str
    extra_metadata: dict = Field(sa_column=Column(JSON))
    
users_repo = SQLModelRepo(model=User, db_engine=engine)

Basic Operations 🛠️

Create a Record ✍️

You can easily create a new record using create.

new_user = users_repo.create(username="john_doe", email="john@example.com")

Retrieve by ID 🆔

Fetch a record by its ID using get_by_id.

user = users_repo.get_by_id(new_user.id)

Update a Record 🔄

Modify a record and call save to persist your changes.

user.email = "john_new@example.com"
users_repo.save(user)

Or, perform partial updates directly with update(id, **kwargs):

users_repo.update(user.id, email="updated_email@example.com")

Delete a Record 🗑️

Easily delete a record by passing the instance to the delete method.

users_repo.delete(user)

Reuse session 🔄

with Session(engine) as session:
    assert users_repo(session).all()

Advanced Querying 🔥

Filtering Records 🔎

Use the filter method to retrieve records meeting specific criteria.

# Filter by username 'john_doe'
users = users_repo.filter(username="john_doe").all()

# Find usernames starting with 'jo'
users = users_repo.filter(User.username.startswith('jo')).all()

Querying Inside JSON Fields 🗂️

from sqlalchemy import cast, String

users = users_repo.filter(cast(User.extra_metadata['some_num'], String) == '99').all()

Paginated Results 📄

Fetch paginated results using paginate or paginate_with_total to retrieve ordered subsets of data.

# Paginate results, sorted by username in descending order
users_paginated, total_count = users_repo.filter().paginate_with_total(
    offset=0, limit=4, order_by="username", desc=True
)

Async 🚅

sqlmodel_repo also has an async version:

pip install sqlmodel_repo[async]
from sqlmodel_repo.async_repo import AsyncSQLModelRepo

⚖️ License

This project is licensed under the MIT License.


Enjoy coding and happy querying with SQLModelRepo! 🎉

Author is a lazy person, so this README.md was generated by AI.

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

sqlmodel_repo-0.0.4.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

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

sqlmodel_repo-0.0.4-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file sqlmodel_repo-0.0.4.tar.gz.

File metadata

  • Download URL: sqlmodel_repo-0.0.4.tar.gz
  • Upload date:
  • Size: 11.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.0

File hashes

Hashes for sqlmodel_repo-0.0.4.tar.gz
Algorithm Hash digest
SHA256 f8a5bdf0b20e7b93ac453f10b520602d8c6b38a5c9d647b71dd2d60ce73c4913
MD5 e221a4a49efbab3f6a9b4dacf98504a5
BLAKE2b-256 553f7f0ea6db45ddc2f8525a9492e2cb04dc89c03850174ee0176e2f41a45ede

See more details on using hashes here.

File details

Details for the file sqlmodel_repo-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: sqlmodel_repo-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.0

File hashes

Hashes for sqlmodel_repo-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 9a5f15cfa4294c0556371da13ee5ceac7c5781d7704dd7dc60b1b6d8caaa0df3
MD5 c20e0b2e348063dea7772cdbed8a0eae
BLAKE2b-256 e6d17950a32a909eff9ad503a62353dd6c4492d1b71e48c6ff2ac3207613bd2c

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