【问题标题】:Which Python API should be used with Mongo DB and Django哪个 Python API 应该与 Mongodb 和 Django 一起使用
【发布时间】:2011-02-14 00:17:57
【问题描述】:

在与 Mongo 交互时,我一直在反复讨论要使用哪个 Python API。我对环境进行了快速调查,并确定了三位主要候选人。

如果您要使用 django 框架设计一个新的内容密集型网站,您会选择什么 API,为什么?

MongoEngine 看起来像是专门为 Django 构建的。 PyMongo 似乎是 Mongo 的一个薄包装。它有很大的力量,虽然失去了很多通过使用 django 作为框架获得的抽象。 Ming 代表了 PyMongo 和 MongoEngine 之间有趣的中间地带,尽管我还没有机会试驾它。

【问题讨论】:

    标签: python django mongodb


    【解决方案1】:

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

    然而,PyMongo 已经涵盖了这一点 - 查询通过一个方便且简单的 API,并且来自 MongoDB 的结果已经是定义的对象(嗯,Python 中的 dicts - 相同的区别)。如果你觉得你真的需要用 Python 对象来装饰你的 Mongo 文档,那么在 PyMongo 中添加一个 SON 操纵器很容易。这种方法的好处是您可以直接在 PyMongo 上编写代码,然后在以后插入其他功能,而无需在代码和 PyMongo 之间插入新的 API。

    还剩下什么?模式创建和迁移有些用处,但几乎就像临时完成一样简单——如果您正在考虑使用 MongoDB,您可能无论如何都想打破传统的 SQL 样式模型。此外,如果有一个完全兼容 Django 的 MongoDB ORM,您可能会从中受益匪浅。比这还少,你可能会为自己创造工作。

    你不会后悔直接使用 PyMongo。

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

    【讨论】:

    • 您对异步(扭曲)驱动程序有任何亲身经历吗?我想在 Twisted 应用程序中使用 MongoDB 并遇到它,但 PyMongo 文档指出 [api.mongodb.org/python/current/…(此项目目前不如 PyMongo 稳定)。这可能只是关于第 3 方开源项目的标准免责声明,但它也可能是真的......这就是为什么我正在寻找关于这个库的第一手 cmets......
    • 这里是异步驱动的作者。据说它不太稳定,因为它与由 MongoDB(同一家公司)维护的 PyMongo 不是最新的。我很久以前使用official documentation 编写了异步驱动程序,该驱动程序已经由许多贡献者进行了很大改进,包括为 MongoDB 工作的人。它实际上很稳定,适合生产。
    【解决方案2】:

    我一直在与Mongokit 合作。到目前为止喜欢它。

    这是blog post I referenced when integrating with Django

    【讨论】:

    • 感谢您提及 Mongokit,Harold。我还没有听说过,会感兴趣地观察它的发展。
    • +1 为 MongoKit,作者非常容易接近,并且一直在根据大众需求大大提高性能。
    【解决方案3】:

    MongoEngine 和 Ming 都依赖于 PyMongo - 他们只是在上面添加了一些不错的功能。我建议至少直接从 PyMongo 开始 - 这样,如果您决定使用其他工具之一并遇到问题,很容易理解“幕后”发生的事情。也就是说,我有很大的偏见;)。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我刚刚找到了“micromongo”:

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

        看起来它在 pymongo 之上添加了足够有用的东西而不会妨碍。

        【讨论】:

          【解决方案6】:

          官方Mongodb documentationdjongo。它通过将 SQL 查询转换为 mongodb 查询来工作。

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

          所有原生 Django 贡献模块(例如管理员、用户、会话)无需任何修改即可工作。

          MongoEngine 需要重写 contrib 模块,最后我检查了一下,本机管理模块没有在 MongoEngine 上运行。

          您现有的模型也无需任何 ORM 翻译即可运行。

          【讨论】:

            猜你喜欢
            • 2021-01-11
            • 2013-12-18
            • 2020-01-30
            • 2016-10-06
            • 2010-12-10
            • 1970-01-01
            • 1970-01-01
            • 2017-10-01
            • 2014-11-11
            相关资源
            最近更新 更多