Skip to main content

🥭 Async MongoDB ODM with type hints in Python

Project description

Mango

Mango

🥭 带有类型提示的 Python 异步 MongoDB 对象文档映射器

license pypi python

查看演示 · 错误报告 · 功能请求

简体中文 · English · 日本語

🔖 目录

目录

📖 简介

Mango 是一个带有类型提示的 Python 异步 MongoDB 对象文档映射器(ODM),它构建在 MotorPydantic 之上。

Mango 使得数据建模和查询变得非常容易,帮助您关注应用程序中真正重要的部分。

✨ 核心特性:

  • 完善的类型标注:利用静态分析来减少运行时问题
  • 简洁流畅的 API:更易于学习和使用,提高开发效率
  • 优雅的编辑器支持:自动完成无处不在,从对象创建到查询结果

[⬆回到顶部]

🚀 安装

PIP

pip install mango-odm

Poetry

poetry add mango-odm

[⬆回到顶部]

🌟 示例

创建您的第一个模型

Mango 包含强大的声明性模型,它使用起来就像 Pydantic 模型一样,看看下面这个例子:

from mango import Field, Model


class Fruit(Model):
    name: str
    price: int = Field(gt=0)  # 价格应不小于0元

通过定义 Fruit 类,我们创建了一个 Mango 模型。

每个 Mango 模型也是一个 Pydantic 模型,所以您也可以使用各种 Pydantic 验证器进行复杂的验证!

Fruit 模型在数据库中的集合名称是 fruit,我们也可以给它起一个不同的名字。

class Fruit(Model, name="goods"):
    name: str
    price: int = Field(gt=0)

[⬆回到顶部]

将数据保存到数据库

接下来让我们使用它来将水果的数据保存到数据库。

# 创建一个实例并保存它
fruit = await Fruit(name="mango", price=100).save()

[⬆回到顶部]

查找符合条件的文档

现在我们可以从数据库中获取一些数据。

# 通过主键查询文档,会返回单独的实例
fruit = await Fruit.get(fruit.id)

Mango 提供了丰富的查询语言,允许您使用 Python 表达式来查询 MongoDB。

# 通过条件查询文档,会返回实例列表
fruits = await Fruit.find(Fruit.name == "mango")

# 异步迭代获得实例
async for fruit in Fruit.find(Fruit.name == "mango"):
    print(fruit)

您也可以使用与 PyMongo/Motor 相同的模式进行查询:

fruits = await Fruit.find({"name": "mango"})
fruits = await Fruit.find({Fruit.name: "mango"})

[⬆回到顶部]

修改数据库中的文档

# 使用结果集上的 get 方法,可以获得单个实例
fruit = await Fruit.find(Fruit.name == "mango").get()

# 修改水果的价格并保存
fruit.price = 200
await fruit.update()

# 我们也可以使用另一种方式
await fruit.update(price=300)

[⬆回到顶部]

嵌入式模型

Mango 也可以存储和查询内嵌文档。

from mango import Field, Model

# 定义内嵌文档模型
class Address(Model, embedded=True):
    city: str
    country: str


class Fruit(Model):
    name: str
    price: int = Field(gt=0)
    address: Address  # 内嵌模型


address = Address(city="any", country="unknown")
fruit = await Fruit(name="mango", price=100, address=address).save()

# 通过内嵌文档查询
await Fruit.find(fruit.address.city == "any")

[⬆回到顶部]

连接数据库

实际上,如果没有显式连接数据库,那么 Mango 将默认连接到 mongodb://localhost:27017test 数据库,就像我们一开始做的那样。

我们也可以显式指定连接的 MongoDB:

from mango import connect

# 连接到 mongodb://localhost:27017 的 mango 数据库
connect("mango")

# 连接到 mongodb://localhost:12345 的 test 数据库
connect(uri="mongodb://localhost:12345")

# 连接到 mongodb://localhost:12345 的 mango 数据库
connect("mango", uri="mongodb://localhost:12345")

[⬆回到顶部]

🤝 贡献

想为这个项目做出一份贡献吗?点击这里阅读并了解如何贡献。

🎉 鸣谢

感谢以下开发者对该项目做出的贡献:

[⬆回到顶部]

💖 支持

喜欢这个项目?请点亮 star 并分享它!

[⬆回到顶部]

📝 许可证

MIT 许可证下分发。请参阅 LICENSE 以获取更多信息。

[⬆回到顶部]

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

mango-odm-0.2.2.tar.gz (19.2 kB view hashes)

Uploaded Source

Built Distribution

mango_odm-0.2.2-py3-none-any.whl (21.5 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