展示 HN:Oxyde – 原生 Pydantic 的异步 ORM,具有 Rust 核心。
Show HN: Oxyde – Pydantic-native async ORM with a Rust core

原始链接: https://github.com/mr-fatalyst/oxyde

## Oxyde ORM:一种现代Python ORM Oxyde 是一种新型的、**类型安全、异步 ORM**,专为 Python 构建,旨在实现**速度、清晰度和可靠性**。它结合了 **Pydantic v2** 的基础和 **高性能 Rust 核心**,以提供开发者友好的体验。 受 Django ORM 的启发,Oxyde 优先考虑**显式性**和可预测的行为。主要功能包括熟悉的 **Django 风格 API**(例如 `Model.objects.filter()`)、对 **PostgreSQL、SQLite 和 MySQL** 的支持,以及强大的 **事务管理**。 Oxyde 拥有令人印象深刻的性能,在许多场景下,**基准测试表明其速度明显快于** Tortoise、Piccolo 和 SQLAlchemy 等流行的 Python ORM。它还提供自动 **迁移** 和自动生成的 **管理面板**,配置最少。 目前正在积极开发中,Oxyde 欢迎社区反馈和贡献。它专为 FastAPI、Litestar 和 Sanic 等现代异步 Python 框架而设计。 [https://oxyde.fatalyst.dev/](https://oxyde.fatalyst.dev/)

## Oxyde:原生 Pydantic 的异步 ORM Oxyde 是一个新的 Python ORM,旨在消除在使用 FastAPI 等框架时常见的模型重复。与 SQLModel(禁用 Pydantic 验证)或 Tortoise 等现有解决方案不同,Oxyde 允许您**直接将 Pydantic 模型用作数据库模型**,从而确保输入和输出都具有完整的验证和原生类型提示。 查询 API 采用 Django 风格以提高熟悉度,但优先考虑显式性——查询仅在使用 `.all()` 等终端方法时执行,并且只有在显式调用 `.join()` 或 `.prefetch()` 时才会加载相关数据,从而防止意外的 N+1 查询。 其关键特性是 Rust 核心,处理数据库管道(SQL 生成、连接池)以提高效率,而 Python 管理模型和业务逻辑。它支持 PostgreSQL、SQLite 和 MySQL,并包含迁移、事务和自动生成的管理面板。 目前处于 Beta 版本(v0.5),Oxyde 旨在通过生成的 stub 文件和 Pydantic 验证提供类型安全,并且可以通过 `pip install oxyde` 轻松安装——无需 Rust 工具链。
相关文章

原文

Logo

Oxyde ORM is a type-safe, Pydantic-centric asynchronous ORM with a high-performance Rust core designed for clarity, speed, and reliability.

Inspired by the elegance of Django's ORM, Oxyde focuses on explicitness over magic, providing a modern developer-friendly workflow with predictable behavior and strong typing throughout.

PyPI Downloads


Heads up! Oxyde is a young project under active development. The API may evolve between minor versions. Feedback, bug reports, and ideas are very welcome. Feel free to open an issue!

  • Django-style API — Familiar Model.objects.filter() syntax
  • Pydantic v2 models — Full validation, type hints, serialization
  • Async-first — Built for modern async Python with asyncio
  • Rust performance — SQL generation and execution in native Rust
  • Multi-database — PostgreSQL, SQLite, MySQL support
  • Transactionstransaction.atomic() context manager with savepoints
  • Migrations — Django-style makemigrations and migrate CLI

Benchmarks vs popular Python ORMs (avg ops/sec, higher is better):

Database Oxyde Tortoise Piccolo Django SQLAlchemy SQLModel Peewee
PostgreSQL 1,475 888 932 736 445 431 80
MySQL 1,239 794 714 536 505 461
SQLite 2,525 1,882 469 1,294 588 567 548

Full benchmark report: Documentation

This creates oxyde_config.py with your database settings and model paths.

# models.py
from oxyde import Model, Field

class User(Model):
    id: int | None = Field(default=None, db_pk=True)
    name: str
    email: str = Field(db_unique=True)
    age: int | None = Field(default=None)

    class Meta:
        is_table = True
oxyde makemigrations
oxyde migrate
import asyncio
from oxyde import db
from models import User

async def main():
    await db.init(default="sqlite:///app.db")

    # Create
    user = await User.objects.create(name="Alice", email="[email protected]", age=30)

    # Read
    users = await User.objects.filter(age__gte=18).all()
    user = await User.objects.get(id=1)

    # Update
    user.age = 31
    await user.save()

    # Delete
    await user.delete()

    await db.close()

asyncio.run(main())
from oxyde.db import transaction

async with transaction.atomic():
    user = await User.objects.create(name="Alice", email="[email protected]")
    await Profile.objects.create(user_id=user.id)
    # Auto-commits on success, rolls back on exception
from fastapi import FastAPI
from oxyde import db

app = FastAPI(
    lifespan=db.lifespan(
        default="postgresql://localhost/mydb",
    )
)

@app.get("/users")
async def get_users():
    return await User.objects.filter(is_active=True).all()
Database Min Version Status Notes
PostgreSQL 12+ Full RETURNING, UPSERT, FOR UPDATE/SHARE, JSON, Arrays
SQLite 3.35+ Full RETURNING, UPSERT, WAL mode by default
MySQL 8.0+ Full UPSERT via ON DUPLICATE KEY, FOR UPDATE/SHARE

Connection URLs:

postgresql://user:password@localhost:5432/database
sqlite:///path/to/database.db
sqlite:///:memory:
mysql://user:password@localhost:3306/database

Auto-generated admin panel for Oxyde ORM with zero boilerplate.

  • Automatic CRUD, search, filters, export
  • FastAPI, Litestar, Sanic, Quart, Falcon
  • Theming, authentication, bulk operations

GitHub →

Full documentation: https://oxyde.fatalyst.dev/

If you have suggestions or find a bug, please open an issue or create a pull request on GitHub.

This project is licensed under the terms of the MIT license.

联系我们 contact @ memedata.com