Skip to main content

Python asynchronous ORM based on SQLAlchemy and Pydantic.

Project description

Cherry ORM

Python 异步 ORM

license pypi python

简体中文 · English

简介

Cherry ORM 是一个 Python 的异步对象关系映射(ORM)库,它基于 SQLAlchemy CorePydantic V2 构建。

它的一切设计都是为了简单易用,极大地减少开发者的数据库操作成本,提高开发效率,让开发者更专注于业务逻辑的实现。

安装

  • 使用 pip: pip install cherry-orm
  • 使用 Poetry: poetry add cherry-orm
  • 使用 PDM: pdm add cherry-orm

文档

-> 文档地址

示例

from datetime import date
from typing import List, Optional

import cherry

db = cherry.Database("sqlite+aiosqlite:///:memory:")


class Student(cherry.Model):
    id: int = cherry.Field(primary_key=True)
    name: str = cherry.Field(unique=True, index=True)
    age: int
    birthday: date = cherry.Field(default_factory=date.today)
    school: cherry.ForeignKey[Optional["School"]] = None

    cherry_config = cherry.CherryConfig(tablename="student", database=db)


class School(cherry.Model):
    id: cherry.PrimaryKey[int]
    name: str = cherry.Field(unique=True, index=True)
    students: cherry.ReverseRelation[List[Student]] = []

    cherry_config = cherry.CherryConfig(tablename="school", database=db)


async def main():
    await db.init()

    # 插入
    school = await School(id=1, name="school 1").insert()
    student1 = await Student(id=1, name="student 1", age=15, school=school).insert()
    await Student(id=2, name="student 2", age=18, school=school).insert()
    await Student(id=3, name="student 3", age=20, school=school).insert()

    # 更新
    student1.age += 1
    await student1.save()
    # or
    await student1.update(age=19)

    # 获取关联的模型
    await school.fetch_related(School.students)
    assert len(school.students) == 3

    # 条件查询
    # Pythonic 风格
    student2: Student = await Student.filter(Student.name == "student 2").get()
    # Django 风格
    student2: Student = await Student.filter(name="student 2").get()

    students: List[Student] = await Student.filter(Student.age >= 18).all()

    # 聚合查询
    student_nums: int = await Student.filter(Student.age >= 18).count()
    assert len(students) == student_nums
    student_age_avg: Optional[int] = await Student.select().avg(Student.age)

    # 查询时预取关联模型
    student_with_school: Student = (
        await Student.filter(Student.name == "student 3")
        .prefetch_related(Student.school)
        .get()
    )

    # 选择更新
    await Student.select().update(birthday=date(2023, 10, 1))
    # 选择删除
    await Student.filter(Student.age >= 20).delete()

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

cherry_orm-1.0.0.tar.gz (25.0 kB view details)

Uploaded Source

Built Distribution

cherry_orm-1.0.0-py3-none-any.whl (28.8 kB view details)

Uploaded Python 3

File details

Details for the file cherry_orm-1.0.0.tar.gz.

File metadata

  • Download URL: cherry_orm-1.0.0.tar.gz
  • Upload date:
  • Size: 25.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for cherry_orm-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e98034100a0d04057e1a524a30bcac1e15e9eb60dea4700626e69237710cf846
MD5 0004dc496463260a5e645c33d1349824
BLAKE2b-256 f5b9e16a159caa7d0bca2c967efd497bc9ef72f3a14651754018ac3ca176fc89

See more details on using hashes here.

File details

Details for the file cherry_orm-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: cherry_orm-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 28.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for cherry_orm-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2549e96e1e0d45555c9a95e212c1924af4418eb4925e02e8621abe529cd5a0f0
MD5 674198c891003cae59debfee95122578
BLAKE2b-256 3a583ff6b2c80b2a0b165351e49316fc0a0f00c9de6b3e5a41607b2a2adf3915

See more details on using hashes here.

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