在与 Mongo 交互时,我一直在反复讨论使用哪个 Python API。我对环境进行了快速调查,并确定了三位主要候选人。
如果您正在使用 django 设计一个新的内容密集型网站框架,你会选择什么 API,为什么?
MongoEngine 看起来像是专门为 Django 构建的。 PyMongo 似乎是 Mongo 的一个薄包装。它具有强大的功能,尽管失去了通过使用 django 作为框架获得的许多抽象。 Ming 代表了 PyMongo 和 MongoEngine 之间有趣的中间地带,虽然我还没有机会试驾它。
最佳答案
正如 Mike 所说,您无法避免 PyMongo - 所有其他接口(interface)都建立在它之上。这些其他接口(interface)可以说是不必要的。 Django 中使用的 ORM 在处理 SQL 时很有用,因为它们减轻了创建 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
https://stackoverflow.com/questions/2740837/