我一直在反复考虑在与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

Django相关问答推荐

执行官/start.sh:没有这样的文件或目录

如何在Django模板中有条件地传递值给with变量?

如何使用邮箱确认码创建django注册

Django rest框架:自定义对象权限不起作用

如何在 django 的列表中查找所有对象作为对象?

如何在 ModelViewSet 逻辑中读取查询字符串值?

- 不支持的操作数类型:DateField和DateField

Django 表单有 Select 但也有自由文本选项?

Django Rest Framework 中的 to_representation() 可以访问普通字段吗

将计数字段添加到 django rest 框架序列化程序

是否有 django 模板过滤器来显示百分比?

Django-Registration:邮箱作为用户名

JSP模板继承

Django 视图 - 首先从调用应用程序的目录加载模板

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

jinja2模板引擎中的这个-是做什么的?

Django:获取上次用户访问日期

django 模板中对象的模型名称

django 在 unittest 测试中设置环境变量

Django Rest Framework 序列化程序中的循环依赖