Skip to main content

A high-performance, Rust-backed ORM for Python.

Project description

Ferro: A High-Performance Rust-Backed Python ORM

PyTest Ruff MkDocs UV Rust Python PyPI License Downloads Codecov Issues

Ferro is a high-performance, asynchronous ORM for Python, built with a Rust-backed core engine. It combines the ergonomics of Pydantic models with the speed and safety of Rust's SQLx and Sea-Query.

Key Features

  • High-Performance Core: All SQL generation and row hydration are handled by a dedicated Rust engine, minimizing "Python Tax" on data-heavy operations.
  • Async First: Built from the ground up for asynchronous applications, utilizing pyo3-async-runtimes for non-blocking I/O.
  • Pydantic Integration: Leverages Pydantic V2 for schema definition and data validation, providing full IDE support and type safety.
  • Zero-Copy Intent: Designed with zero-copy principles to maximize throughput during large-scale data retrieval.
  • Identity Map: Ensures object consistency across your application by tracking active model instances in a thread-safe registry.

Architecture

Ferro operates through a dual-layer architecture connected via a high-performance FFI (Foreign Function Interface) bridge:

  1. Python Layer: Developers define models using standard Python classes; a metaclass registers them with the backend.
  2. Rust Engine: Built on SQLx and Sea-Query for GIL-free row parsing and object instantiation.

Installation

Ferro is distributed as pre-compiled wheels for macOS, Linux, and Windows.

pip install ferro-orm
# Or with migration support
pip install "ferro-orm[alembic]"

Quick Start

import asyncio
from typing import Annotated
from ferro import Model, FerroField, connect

class User(Model):
    id: Annotated[int, FerroField(primary_key=True)]
    username: str
    is_active: bool = True

async def main():
    await connect("sqlite:example.db?mode=rwc", auto_migrate=True)

    # Create
    alice = await User.create(username="alice")

    # Query
    active_users = await User.where(User.is_active == True).all()
    print(f"Found {len(active_users)} active users.")

if __name__ == "__main__":
    asyncio.run(main())

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

ferro_orm-0.1.1.tar.gz (181.3 kB view details)

Uploaded Source

Built Distributions

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

ferro_orm-0.1.1-cp39-abi3-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.9+Windows x86-64

ferro_orm-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

ferro_orm-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.4 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

ferro_orm-0.1.1-cp39-abi3-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file ferro_orm-0.1.1.tar.gz.

File metadata

  • Download URL: ferro_orm-0.1.1.tar.gz
  • Upload date:
  • Size: 181.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ferro_orm-0.1.1.tar.gz
Algorithm Hash digest
SHA256 491dbfd7aca10a829085958779f2757ddd3a0e34ee8f0115f8252771e0d013d9
MD5 b49a42f41004267139c5065e637b5eaa
BLAKE2b-256 d961f8a0b530bfc29076aaa026eaa939042c5fa0f0623639ea4475eafa399756

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.1.1.tar.gz:

Publisher: publish.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ferro_orm-0.1.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: ferro_orm-0.1.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ferro_orm-0.1.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 0ef74e2dd7896a66e23dc850461fc1f0fd40ecff02e2814182090045ea72a35e
MD5 ff7dfcfc87ede3146c45aead5c7e6b57
BLAKE2b-256 3112e09f0cff84829040694b7e4fc427972ca8cb44fce65b15f672759fddd392

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.1.1-cp39-abi3-win_amd64.whl:

Publisher: publish.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ferro_orm-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ferro_orm-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e64ef791221fa2bfe93403295d7e4a6601bb0e0c83075743c91dfb0c820abfce
MD5 357686aaccc3c558316da99183ef08e3
BLAKE2b-256 7869b308ada745cbb31b65743114208fc18ef5df3abf9a83612b96024fd46a5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ferro_orm-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ferro_orm-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0fcc349fd016437640e49c8043e2c3f7e271a261ad6bcaa3ba37d2459d5be08d
MD5 389c85850f3a23db90fa106fbda6c944
BLAKE2b-256 5a93a20c9cab4e348f9d428a7ab88797e14b86aa763fd6088e5e6a97742c9eec

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ferro_orm-0.1.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ferro_orm-0.1.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e411e9f6aabba6177954f606caa2b512d3f97f7a5ba7274ec819a8a64002298e
MD5 f9fd470f3f8c1dd813f203a73d6b2cba
BLAKE2b-256 22d5e5b8830cfb1c1c9c09b72a2b921c580181a97c7cec5ca45a0131604b0614

See more details on using hashes here.

Provenance

The following attestation bundles were made for ferro_orm-0.1.1-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: publish.yml on syn54x/ferro-orm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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