Python中如何使用PyMODM进行MongoDB对象文档映射

一个由 MongoDB 官方开发者维护的 MongoDB Python ORM 库:

https://pypi.python.org/pypi/pymodm
Python中如何使用PyMODM进行MongoDB对象文档映射

16 回复

沙发,是 orm 库吗?还是类似 pymysql 的这种。


PyMODM是MongoDB官方支持的ODM(对象文档映射器),它让你能用Python类来操作MongoDB,类似SQLAlchemy或Django的ORM。下面是一个完整的使用示例。

首先,安装它:

pip install pymodm

假设我们要建一个用户系统。先定义模型:

from pymodm import MongoModel, fields
from pymodm.connection import connect

# 先连数据库,test是数据库名
connect('mongodb://localhost:27017/test')

class User(MongoModel):
    # 字段定义
    email = fields.EmailField(primary_key=True)  # 用邮箱当主键
    name = fields.CharField()
    age = fields.IntegerField()
    created_at = fields.DateTimeField()
    
    class Meta:
        # 指定集合名,不写就默认用类名(User)
        collection_name = 'users'

现在进行增删改查操作:

from datetime import datetime

# 1. 创建并保存用户
new_user = User(
    email='alice@example.com',
    name='Alice Smith',
    age=30,
    created_at=datetime.now()
)
new_user.save()  # 保存到数据库

# 2. 查询所有用户
all_users = User.objects.all()
for user in all_users:
    print(user.name, user.email)

# 3. 条件查询(比如找年龄大于25的)
adults = User.objects.raw({'age': {'$gt': 25}})
# 或者用查询集API
adults = User.objects.filter({'age': {'$gt': 25}})

# 4. 更新(比如修改名字)
user = User.objects.get({'email': 'alice@example.com'})
user.name = 'Alice Johnson'
user.save()  # 更新

# 5. 删除
user.delete()

PyMODM还支持引用其他模型、自定义验证器、索引等高级功能。比如加个唯一索引:

class Product(MongoModel):
    sku = fields.CharField(primary_key=True)
    name = fields.CharField()
    
    class Meta:
        indexes = [('name', 1)]  # 在name字段上建升序索引

总的来说,PyMODM把MongoDB文档映射成Python对象,写起来很直观。

和 django 一样,赞

应该说是 ODM

写的很清楚 MongoDB Python ORM 库

又多了一条裤子

虽然不是 ORM,但是其他的 mongo model lib 可以创建关系的。比如 mongoengine, 有 ReferenceField。
不知道这个可不可以,看了下,没有能添加关系的例子。

我在这里找到了添加关联关系的例子 http://docs.mongoengine.org/tutorial.html#defining-our-documents:

from pymodm import EmbeddedMongoModel, MongoModel, fields

class Comment(EmbeddedMongoModel):
author = fields.ReferenceField(User)
content = fields.CharField()

class Post(MongoModel):
title = fields.CharField()
author = fields.ReferenceField(User)
revised_on = fields.DateTimeField()
content = fields.CharField()
comments = fields.EmbeddedDocumentListField(Comment)

你什么眼神

1 楼和 7 楼厉害的

用法和 mongoengine hin 类似

在用一个轻量级的 umongo

用法类似 mongoengine,但是貌似对多个库的支持不好,现在一直在用 mongokit

这个库不是好久没更新了吗

对,是好久没更新了,新版本的 pymongo 都不能兼容,估计再往后用风险就比较大了……

回到顶部