我一直在反复考虑在与Mongo交互时使用哪种Python API.我快速调查了一下情况,确定了三位领先的候选人.
如果您正在使用django框架设计一个新的内容密集型网站,您会 Select 什么API?为什么?
MongoEngine看起来就像是专门为Django设计的.PyMongo似乎是对Mongo的一个薄薄的包装.它功能强大,但失go 了通过使用Django作为框架而获得的大量抽象.Ming代表了PyMongo和MongoEngine之间有趣的中间地带,尽管我还没有机会试驾它.
我一直在反复考虑在与Mongo交互时使用哪种Python API.我快速调查了一下情况,确定了三位领先的候选人.
如果您正在使用django框架设计一个新的内容密集型网站,您会 Select 什么API?为什么?
MongoEngine看起来就像是专门为Django设计的.PyMongo似乎是对Mongo的一个薄薄的包装.它功能强大,但失go 了通过使用Django作为框架而获得的大量抽象.Ming代表了PyMongo和MongoEngine之间有趣的中间地带,尽管我还没有机会试驾它.
正如Mike所说,你无法避免PyMongo——所有其他接口都建立在它之上.这些其他接口可以说是不必要的.Django中使用的ORM在处理SQL时非常有用,因为它们减轻了创建SQL查询和模式以及将结果集解析为对象的复杂性.
然而,PyMongo已经覆盖了这一点-查询通过一个方便而简单的API,并且根据定义,来自MongoDB的结果已经是对象(嗯,Python中的字典-相同的区别).如果您觉得确实需要用Python对象装饰Mongo文档,那么向PyMongo添加一个子操纵器是很容易的.这种方法的好处是,您可以直接在PyMongo上编写代码,稍后再滑入额外的功能,而不必在代码和PyMongo之间插入新的API.
还剩下什么?模式创建和迁移在某种程度上是有用的,但几乎是即席完成的-如果您正在考虑使用MongoDB,您很可能无论如何都想打破传统的SQL样式模型.此外,如果有一个完全兼容Django的MongoDB ORM,您可能会从中获益.任何低于这个数字的东西,你很可能都是在为自己创造工作.
你不会后悔直接使用PyMongo.
如果您对最高效率感兴趣,最后一个值得关注的 Select 是PyMongo的异步版本,这里是:http://github.com/fiorix/mongo-async-python-driver