同步/异步MongoDB ODM,是的。
umongo的Python项目详细描述
μmongo:同步/异步odm
μmongo是一个python mongodb odm。IT起始来自两个需求: 缺乏异步odm和文档(非)序列化的困难 使用现有的ODM。
从这一点出发,μmongo做出了一些设计选择:
- 尽可能接近标准MongoDB驱动程序以保持相同的API: 使用 查找({"field": "value"}) 像往常一样,但检索数据时要小心包装!
- 使用多个驱动程序( pymongo , txmongo , motor异步 和 mongomok 暂时)
- 与棉花糖系列化库紧密集成 向外部世界转储和加载数据
- i18n集成以本地化验证错误消息
- 自由软件:麻省理工学院许可证
- 90%以上覆盖率测试;-)
快速示例
fromdatetimeimportdatetimefrompymongoimportMongoClientfromumongoimportInstance,Document,fields,validatedb=MongoClient().testinstance=Instance(db)@instance.registerclassUser(Document):email=fields.EmailField(required=True,unique=True)birthday=fields.DateTimeField(validate=validate.Range(min=datetime(1900,1,1)))friends=fields.ListField(fields.ReferenceField("User"))classMeta:collection=db.user# Make sure that unique indexes are createdUser.ensure_indexes()goku=User(email='goku@sayen.com',birthday=datetime(1984,11,20))goku.commit()vegeta=User(email='vegeta@over9000.com',friends=[goku])vegeta.commit()vegeta.friends# <object umongo.data_objects.List([<object umongo.dal.pymongo.PyMongoReference(document=User, pk=ObjectId('5717568613adf27be6363f78'))>])>vegeta.dump()# {id': '570ddb311d41c89cabceeddc', 'email': 'vegeta@over9000.com', friends': ['570ddb2a1d41c89cabceeddb']}User.find_one({"email":'goku@sayen.com'})# <object Document __main__.User({'id': ObjectId('570ddb2a1d41c89cabceeddb'), 'friends': <object umongo.data_objects.List([])>,# 'email': 'goku@sayen.com', 'birthday': datetime.datetime(1984, 11, 20, 0, 0)})>
立即获取:
$ pip install umongo # This installs umongo with pymongo $ pip install my-mongo-driver # Other MongoDB drivers must be installed manually
或者与您计划使用的MongoDB驱动程序一起使用:
$ pip install umongo[motor] $ pip install umongo[txmongo] $ pip install umongo[mongomock]