Skip to main content

Utilitarian Python ORM for Postgres, backed by asyncpg, Pydantic, and PyPika

Project description

p3orm

p3orm logo

Utilitarian Python ORM for Postgres, backed by asyncpg, Pydantic, and PyPika

Test Status pypi Supported Python Versions: 3.8, 3.9, 3.10 MIT License

Philosophy

90% of the time we talk to a database is with a CRUD operation. p3orm provides convenience helpers for fetching (one, first, many), inserting (one, many), updating (one), and deleting (one, many).

The remaining 10% is a bit more complicated. p3orm doesn't attempt to hide SQL queries or database interactions behind any magic. Instead, it empowers you to write direct and legible SQL queries with PyPika and execute them explicitly against the database.

Objects created or fetched by p3orm are dead, they're just Pydantic models. If you want to interact with the database, you do so explicitly.

Features

  • Comprehensive type annotations (full intellisense support)
  • Type validation
  • Full support for PyPika queries
  • Support for all asyncpg types

Installation

Install with poetry

poetry add p3orm

or with pip

pip install p3orm

Basic Usage

from datetime import datetime

from p3orm.core import Porm
from p3orm.table import Table, PormField

class Thing(Table):
    id = PormField(int, "id", pk=True, autogen=True)
    name = PormField(str, "name")
    created_at = PormField(datetime, "created_at", autogen=True)

await Porm.connect(user=..., password=..., database=..., host=..., port=...)

thing = Thing(name="Name")

inserted = await Thing.insert_one(thing)

fetched = await Thing.fetch_first(Thing.id == 1)

fetched.name = "Changed"

updated = await Thing.update_one(fetched)

deleted = await Thing.delete_where(Thing.id == updated.id)

Usage

See docs

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

p3orm-0.4.0.tar.gz (9.4 kB view hashes)

Uploaded Source

Built Distribution

p3orm-0.4.0-py3-none-any.whl (9.1 kB view hashes)

Uploaded Python 3

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