🥭 Async MongoDB ODM with type hints in Python
Project description
Mango
🥭 带有类型提示的 Python 异步 MongoDB 对象文档映射器
🔖 目录
📖 简介
Mango 是一个带有类型提示的 Python 异步 MongoDB 对象文档映射器(ODM),它构建在 Motor 和 Pydantic 之上。
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:27017
的 test
数据库,就像我们一开始做的那样。
我们也可以显式指定连接的 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for mango_odm-0.2.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e3a383d8a132085b470059877da8ac2bf8cddac47de2abd2d7d341542661de36 |
|
MD5 | 36a5384513ff08eede51049f116db094 |
|
BLAKE2b-256 | 88f4cc6de1ab1dc30d4bb70cdbecdb00608e6d6cd48e30351ed56905c2a81dbb |