我正在寻找从两个世界中获得最佳效果的MongoDB Python ODM / ORM:ODM / ORM和超快速直接字典读取。
换句话说,包装应符合以下要求:
我知道我要求的很多,但是这样的东西不会很棒:)
事实上,问题可以改为:“现有的Python Mongodb ODM / ORM(MongoKit,MongoEngine)可以通过这种方式轻松扩展。”
首先,我也喜欢拥有它。
根据我的研究
明是一个非常有前途的mongo ODM驱动程序:http://merciless.sourceforge.net/
MongoEngine太大了,无法根据您的要求/用例进行调整。 MongoKit也是如此。
micromongo有一些希望:http://packages.python.org/micromongo
可能是一个很好的起点。
顺便说一句:嗯......我不知道你在写什么,但是你可以轻松地构建管理界面并最终拥有下一代Django。祝好运!
好吧,如果你采用ORM的理论,你需要的不是ORM,因为MongoDB不是关系数据库,所以没有映射到关系实体。
我认为你必须检查this post的答案,检查所提出的建议是否是你需要的,我个人直接使用MongoDB + Python,因为Mongo和Python的“本质”。
环顾四周,我发现这个图书馆可以帮助你mongoEngine。就像Django ORM。你应该检查一下。
umongo在问到这个问题后很久就出生了。虽然相对年轻,但它正在逐渐成熟。与micromongo一样,它的目标是简单(“u”代表μ/ micro),因此它不提供问题中所要求的众多功能,但它意味着要构建的理想基础。
它在内部使用Marshmallow进行模型架构/验证,因此您可以使用Marshmallow与其他库愉快地使用它。我在Flask应用程序中使用它,它使用Marshmallow提供REST API来解析输入/输出。这限制了DB和API架构之间的重复数量。该应用程序使用Marshmallow环境中的其他库(webargs / apispec)。
由于您可以直接访问集合,因此可以使用普通的pymongo查询。
此外,它不仅与pymongo兼容,而且与异步驱动程序兼容。
看看pymongoext https://github.com/musyoka-morris/pymongoext,它的灵感来自于猫鼬。
主要特点是:
用法示例:
from datetime import datetime
from pymongo import MongoClient, IndexModel
from pymongoext import *
class User(Model):
@classmethod
def db(cls):
return MongoClient()['my_database_name']
__schema__ = DictField(dict(
email=StringField(required=True),
name=StringField(required=True),
yob=IntField(minimum=1900, maximum=2019)
))
__indexes__ = [IndexModel('email', unique=True), 'name']
class AgeManipulator(Manipulator):
def transform_outgoing(self, doc, model):
doc['age'] = datetime.now().year - doc['yob']
return doc
# Create a user
>>> User.insert_one({'email': '[email protected]', 'name': 'Jane Doe', 'yob': 1990})
# Fetch one user
>>> user = User.find_one()
# Print the users age
>>> print(user.age)