Python中如何使用PyMODM进行MongoDB对象文档映射
一个由 MongoDB 官方开发者维护的 MongoDB Python ORM 库:
https://pypi.python.org/pypi/pymodm
Python中如何使用PyMODM进行MongoDB对象文档映射
沙发,是 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 一样,赞
又多了一条裤子
可以~
虽然不是 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 都不能兼容,估计再往后用风险就比较大了……


