MongoDB和Django应该使用哪一种Python API

我一直在与Mongo交互时使用哪个Python API。 我做了一个快速的景观调查,并确定了三名主要候选人。

  • PyMongo
  • MongoEngine

如果你使用django框架devise一个新的内容繁重的网站,你会select什么API,为什么?

MongoEngine看起来就像它是专门为Django构build的。 PyMongo似乎是Mongo周围的一个薄蒙皮。 它有很大的权力,但是却失去了很多通过使用django作为框架获得的抽象。 明代表PyMongo和MongoEngine之间的一个有趣的中间地带,虽然我没有机会去试试。

正如Mike所说的,你无法避免使用PyMongo – 所有其他接口都build立在PyMongo之上。 这些其他接口可以说是不必要的。 诸如在Django中使用的ORM在处理SQL时非常有用,因为它们减轻了创buildSQL查询和模式的复杂性,并将结果集parsing到对象中。

然而,PyMongo已经包含了这些内容 – 查询经过了一个方便简单的API,而来自MongoDB的结果已经是对象了(根据定义,Python中的字典 – 相同的区别)。 如果你觉得你真的需要用Python对象来装饰你的Mongo文档,那么很容易在PyMongo中添加一个SON操纵器。 这种方法的好处在于,你可以直接在PyMongo上编写代码,稍后再添加其他function,而不必在代码和PyMongo之间插入一个新的API。

还剩下什么? 模式创build和迁移是有用的,但几乎就像临时做的那样 – 如果您正在考虑使用MongoDB,您希望摆脱传统的SQL风格模式。 另外,如果有一个完全兼容Django的MongoDB ORM,你可能会得到一些里程碑。 任何不足之处,你可能会为自己创造工作。

你不会后悔直接使用PyMongo。

如果您对最高效率感兴趣,最后一个值得关注的select是PyMongo的asynchronous版本,在这里: http ://github.com/fiorix/mongo-async-python-driver

我一直在和Mongokit合作 。 就像迄今为止。

以下是我在与Django集成时引用的博客文章

MongoEngine和Ming都依赖于PyMongo,他们只是把一些很好的function放在上面。 我build议至less直接启动w / PyMongo – 这样,如果你决定使用其他工具之一,遇到问题,将很容易理解“底层”下发生了什么。 这就是说,我非常有偏见;)。

你可以试试django-mongodb-engine。 这是Django-nonrel的后端,所以你可以继续使用Django的模型和ORM。 它还不如其他API完整: http : //www.allbuttonspressed.com/blog/django/2010/05/MongoDB-backend-for-Django-nonrel-released

我刚刚find'micromongo':

http://packages.python.org/micromongo/

看起来像是在pymongo的基础上增加了足够的有用的东西而不妨碍。

看看djongo 。 它通过将SQL查询转换成mongodb查询来工作。

你不需要django-nonrel来运行它。

所有的本地Django的贡献模块 (如pipe理员,用户,会议)工作没有任何修改。

MongoEngine需要重写contrib模块,最后我检查了,原生的admin模块没有在MongoEngine上运行。

您现有的模型也没有任何ORM翻译。