Oxyde for PostgreSQL
Oxyde for PostgreSQL is a PostgreSQL-focused fork of Oxyde ORM: a type-safe, Pydantic-centric asynchronous ORM with a high-performance Rust core designed for clarity, speed, and reliability. It builds on Oxyde's great work and optimizes it for PostgreSQL with bug fixes and PostgreSQL-specific features.
Requires PostgreSQL 18+ and Python 3.13+. The Rust core checks the server version when connecting. Both postgres:// and postgresql:// connection URLs are supported.
Features
- Pydantic v2 models with validation, type hints, and serialization.
- Familiar
Model.objects.filter()queries, joins, aggregates, and bulk operations. - Native PostgreSQL arrays, JSONB, enums, UUIDs, decimals,
RETURNING, and row locks. - Array and JSON lookups:
contains,contained_by, andoverlap. - Async transactions with nested savepoints and public transaction-depth reporting.
- Schema migrations with PostgreSQL advisory locking and transactional DDL.
- Rust SQL generation, connection pooling, and execution, with Python 3.15 wheel support.
- Cache-disabled unnamed statements for PostgreSQL/PgBouncer, including cold custom-type decoding without replaying queries.
Version 0.2.0 upgrades SQLx to 0.9.0, SeaQuery to 1.0.2, and the Python dependencies. Release notes list the changes and the original fork additions.
Installation
pip install oxyde-postgres
The distribution names are oxyde-postgres and oxyde-postgres-core. Python imports remain oxyde, the native module remains _oxyde_core, and the CLI remains oxyde. Use a separate virtual environment from upstream Oxyde because the packages share these import names.
To build this checkout:
uv venv --python 3.13
source .venv/bin/activate
uv pip install maturin
maturin develop --manifest-path crates/oxyde-core-py/Cargo.toml
uv pip install -e './python[dev]'
Quick start
import asyncio
from oxyde import Field, Model, db
from oxyde.db.schema import create_tables
class User(Model):
id: int | None = Field(default=None, db_pk=True)
name: str
email: str = Field(db_unique=True)
tags: list[str] = Field(default_factory=list)
class Meta:
is_table = True
async def main():
await db.init(default="postgresql://user:password@localhost:5432/app")
try:
connection = await db.get_connection()
await create_tables(connection)
await User.objects.create(name="Alice", email="alice@example.com", tags=["python"])
users = await User.objects.filter(tags__contains=["python"]).all()
print(users)
finally:
await db.close()
asyncio.run(main())
For managed schema changes, run oxyde init, oxyde makemigrations, and oxyde migrate. See the documentation, connection guide, and contributor guide.
Credit and license
Oxyde for PostgreSQL is based on Oxyde, created by Nikita Ryzhenkov and its contributors. The original MIT license is preserved. The vendored SQLx PostgreSQL driver retains its MIT and Apache-2.0 licenses.
Metadata
Release files for oxyde-postgres 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| oxyde_postgres-0.2.0.tar.gz | 120.4 kB | Without provenance | Details for oxyde_postgres-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| oxyde_postgres-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for oxyde_postgres-0.2.0-py3-none-any.whl |
Total release size: 266.1 kB
Release files / oxyde_postgres-0.2.0.tar.gz
| Download URL | oxyde_postgres-0.2.0.tar.gz |
|---|---|
| Size | 120.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
93e08410bc613d9c8c4bd33862c99f3c67588c245300320ca48d978d4f14c412
|
|
BLAKE2b-256 checksum How to use checksums |
0c04b84e7b6404e10a87e415ca950861a3dac117082f60732be2b11b885d7809
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / oxyde_postgres-0.2.0-py3-none-any.whl
| Download URL | oxyde_postgres-0.2.0-py3-none-any.whl |
|---|---|
| Size | 145.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bd403e17f88a95d35348bb86cebf09d36a28877a3a3c3ef4b5548a098ed0b295
|
|
BLAKE2b-256 checksum How to use checksums |
86a92a9d27924a2cc580fe398624d684c1fd7872a6d60bff08d8c0cafd1fc51b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for oxyde-postgres 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.