在Mongo DB和Django中应使用哪个Python API

48 投票
6 回答
17435 浏览
提问于 2025-04-15 22:10

我一直在考虑用哪个Python接口来和Mongo数据库互动。我快速了解了一下目前的情况,找到了三个主要的选择。

如果你要用django框架设计一个内容丰富的网站,你会选择哪个接口,为什么呢?

MongoEngine看起来是专门为Django设计的。PyMongo则像是一个轻量级的Mongo封装,功能强大,但在使用Django框架时,很多便利的抽象特性就没了。Ming则是在PyMongo和MongoEngine之间的一个有趣选择,不过我还没机会试用它。

6 个回答

6

MongoEngine和Ming这两个工具都是建立在PyMongo的基础上的,它们只是给PyMongo加了一些好用的功能。我建议你至少先直接使用PyMongo,这样如果你决定使用其他工具并遇到问题时,你会更容易理解背后发生了什么。不过,我可能有点偏见哦;)

11

我一直在使用Mongokit,到目前为止感觉不错。

这是我在和Django整合时参考的一篇博客文章

58

正如Mike所说,你无法避免使用PyMongo——其他所有接口都是建立在它之上的。这些其他接口可以说是多余的。像Django中使用的ORM(对象关系映射)在处理SQL时很有用,因为它们简化了创建SQL查询和模式的复杂性,并将结果集解析成对象。

但是,PyMongo已经解决了这些问题——查询通过一个方便简单的API进行,而从MongoDB返回的结果本身就是对象(在Python中是字典,差不多意思)。如果你觉得真的需要用Python对象来装饰你的Mongo文档,可以很容易地为PyMongo添加一个SON处理器。这个方法的好处在于,你可以直接在PyMongo上编写代码,之后再添加额外的功能,而不需要在你的代码和PyMongo之间插入一个新的API。

那么剩下的是什么呢?模式创建和迁移有点用,但几乎可以随意处理——如果你考虑使用MongoDB,可能就是想摆脱传统的SQL模型。此外,如果有一个完全兼容Django的MongoDB ORM,你可能会觉得有用。但如果不完全兼容,你可能会给自己增加工作量。

直接使用PyMongo,你不会后悔。

如果你对高效性感兴趣,还有一个值得关注的选项是PyMongo的异步版本,链接在这里:http://github.com/fiorix/mongo-async-python-driver

撰写回答